Черное мерцание при изменении размера полупрозрачного виджета Qt (только когда Aero включен)? - PullRequest
3 голосов
/ 16 февраля 2010

У меня есть высокоуровневый виджет Qt с флагом FramelessWindowHint и установленным атрибутом WA_TranslucentBackground. У него есть несколько детей, каждый из которых рисует на нем изображение. Их нет в макете. Вместо этого я просто перемещаю их, когда что-то меняется (это не изменяется пользователем).

В окне есть два состояния - большое и малое. Когда я переключаюсь между ними, я изменяю размер окна и перемещаю детей. Проблема заключается в том, что при изменении размера окна на окне верхнего уровня на короткое время мигает черный ящик, прежде чем изображения будут закрашены.

Проблема исчезнет, ​​если я отключу Aero. Я нашел краткое упоминание об этой проблеме в статье, описывающей новый выпуск Qt (этот выпуск давно миновал), но он все еще не работает.

Есть идеи почему?

Спасибо!

1 Ответ

0 голосов
/ 07 апреля 2010

У меня нет опыта работы с Qt, но я работал с другими инструментами для работы с окнами.Обычно вы видите этот вид мигания, когда вы рисуете обновления прямо на экране.Исправление состоит в том, чтобы вместо этого использовать Двойную буферизацию , что в основном означает, что вы рендерите свои обновления в внеэкранный буфер (своего рода растровое изображение, в чистом смысле слова), а затем копируете все обновленное изображениедля экрана в одной, быстрой операции.

Причина, по которой вы видите только мерцание, иногда является просто артефактом того, как быстро обновляется ваш экран по сравнению с тем, как быстро создаются обновления.Если вам повезло, все обновления происходят между обновлениями экрана, и вы можете не увидеть мерцания.

...