Qt 图形被另一个遮挡,但仍然导致绘图更新

Qt graphic obscured by another, but still causes paint update

我正在使用 Qt5.6,我渲染了 QWidget 个图形对象,当其他图形呈现在其他图形前面时,这似乎会触发前面图形下的图形更新。

这会产生开销,我想确定后面的图形是否完全被前面的图形遮挡,如果是,则应该中止绘制事件。

我认为这将是自动的,并且作为 Qt 内部的一部分完成,但似乎不是。

每个小部件的绘制事件都来自小部件合成器,一旦合成器确定应该重新绘制小部件。没有办法中止它:如果事件到达,则意味着小部件 必须 绘制,否则您将得到视觉上未定义的结果。

默认情况下,小部件可以是透明的,小部件合成器必须按从后到前的顺序绘制整个堆栈的小部件才能合成它们。

任何不透明的小部件都应该设置 Qt::WA_OpaquePaintEvent 属性。这将通知小部件合成器不必绘制完全隐藏在小部件后面的任何小部件。确保绘制小部件的每个像素!