Черное мерцание при изменении размера полупрозрачного виджета Qt (только когда Aero включен)?

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

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

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

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

Спасибо!

1 ответ

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

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

Другие вопросы по тегам