Russian Qt Forum
Ноябрь 05, 2024, 22:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QRegion, мелькает грязь при установленных видео-драйверах  (Прочитано 2622 раз)
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));

На виндюках проблем нет, на МСВС на виртуальной машине тоже, на "железной" также все ок, а наблюдается это только при установленных драйверах для видео-карточки.
Записан
DpoHro
Гость
« Ответ #1 : Май 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();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.061 секунд. Запросов: 21.