Черное мерцание при изменении размера полупрозрачного виджета Qt (только когда Aero включен)?
У меня есть высокоуровневый виджет Qt с флагом FramelessWindowHint и установленным атрибутом WA_TranslucentBackground. У него есть несколько детей, каждый из которых рисует на нем изображение. Их нет в макете. Вместо этого я просто перемещаю их, когда что-то меняется (это не изменяемый пользователем размер).
У окна есть два состояния - большое и маленькое. Когда я переключаюсь между ними, я изменяю размер окна и перемещаю детей. Проблема заключается в том, что при изменении размера окна на верхнем уровне на короткое время вспыхивает черный квадрат, прежде чем изображения будут закрашены.
Проблема исчезнет, если я отключу Aero. Я нашел краткое упоминание об этой проблеме в статье, описывающей новый выпуск Qt (этот выпуск давно миновал), но он все еще не работает.
Есть идеи почему?
Спасибо!
1 ответ
У меня нет опыта работы с Qt, но я работал с другими оконными инструментами. Обычно вы видите этот вид мигания, когда вы рисуете обновления прямо на экране. Исправление заключается в том, чтобы вместо этого использовать двойную буферизацию, что в основном означает, что вы визуализируете свои обновления в внеэкранный буфер (своего рода растровое изображение, в чистом смысле этого слова), а затем копируете все обновленное изображение на экран в одном, быстрая операция.
Причина, по которой вы видите только мерцание, иногда является просто артефактом того, как быстро обновляется ваш экран по сравнению с тем, как быстро создаются обновления. Если вам повезло, то все обновления происходят между обновлениями экрана, и вы можете не увидеть мерцания.