Russian Qt Forum

Qt => Общие вопросы => Тема начата: DpoHro от Май 27, 2009, 12:48



Название: QRegion, мелькает грязь при установленных видео-драйверах
Отправлено: DpoHro от Май 27, 2009, 12:48
МСВС

Код:
void CDDDDDD::drawingPixmap(QRegion _rgn)
{
QPixmap result_pixmap( m_initial_pixmap.width(), m_initial_pixmap.height() );
result_pixmap.fill(QColor(Qt::transparent)); // сделали её полностью прозрачной
QPainter painter(&result_pixmap);

if ( !m_show )
{
QRegion rgnAll( QRect(0,0,m_initial_pixmap.width(), m_initial_pixmap.height()) );
_rgn = rgnAll.xored(_rgn);
}
painter.setClipRegion( _rgn );
painter.drawPixmap( 0, 0, m_initial_pixmap.width(), m_initial_pixmap.height(), m_initial_pixmap );

pseudoShadow()->setPixmap( result_pixmap );
pseudoShadow()->repaint();
pseudoWidget()->setPixmap( result_pixmap );
pseudoWidget()->repaint();
}


На месте где должен быть выбит регион (то есть должно быть прозрачно и виден нижний виджет) происходит мелькание какого то графического мусора с соседних виджетов. Откуда оно тут берется не пойму.

Эта ф-я - член класса не гуишного потока вызывается из run() вот такой конструкцией:

Код:
QMetaObject::invokeMethod(this, "drawingPixmap", Qt::BlockingQueuedConnection, Q_ARG(QRegion, rgn));

На виндюках проблем нет, на МСВС на виртуальной машине тоже, на "железной" также все ок, а наблюдается это только при установленных драйверах для видео-карточки.


Название: Re: QRegion, мелькает грязь при установленных видео-драйверах
Отправлено: DpoHro от Май 27, 2009, 15:17
Объяснения не нашел, но работает вот так:

Код:
painter.save();
painter.setClipRegion( _rgn );
painter.drawPixmap( 0, 0, m_initial_pixmap.width(), m_initial_pixmap.height(), m_initial_pixmap );
painter.restore();