调整半透明Qt小部件时的黑色闪烁(仅在启用Aero时)?

时间:2010-02-15 22:47:24

标签: c++ windows qt aero flicker

我有一个顶级的Qt小部件,其中包含FramelessWindowHint标志和WA_TranslucentBackground属性集。它有几个孩子,每个孩子都在上面画一个图像。它们不在布局中。相反,我只是在某些事情发生变化时移动它们(它不是用户可调整大小的)。

窗口有两种状态 - 大状态和小状态。当我在它们之间切换时,我调整窗口大小并重新定位孩子。问题是,当窗口调整大小时,在图像被涂在它上面之前,顶层窗口会短暂闪现一个黑盒子。

如果我禁用Aero,问题就会消失。我在一篇描述Qt新版本的文章中发现了这个问题的简要提及(这个版本已经很久了),但它仍然无效。

任何想法为什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我没有专门的Qt经验,但我使用过其他窗口工具包。通常,当您直接向屏幕绘制更新时,会看到这种闪烁。修复是使用Double buffering,这基本上意味着您将更新渲染到屏幕外缓冲区(某种位图,在最纯粹的意义上),然后将整个更新的图像复制到屏幕中单一,快速的操作。

您有时只看到闪烁的原因仅仅是屏幕刷新速度与绘制更新速度的关系。如果你“幸运”,那么所有更新都会在屏幕刷新之间发生,你可能看不到任何闪烁。