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

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

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

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

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

Спасибо!


person D..    schedule 15.02.2010    source источник


Ответы (1)


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

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

person Eric Melski    schedule 07.04.2010