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

Posted

技术标签:

【中文标题】Qt 图形被另一个图形遮挡,但仍会导致绘图更新【英文标题】:Qt graphic obscured by another, but still causes paint update 【发布时间】:2016-08-15 15:52:50 【问题描述】:

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

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

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

【问题讨论】:

只是 QWidget 派生对象。 1) 你为什么会遇到一个小部件完全在另一个之上的情况? 2) 你确定你的 QPaintEvent 参数中有一个未剪辑的区域吗? 我的应用程序呈现来自 xml 文件的内容。一些小部件的子小部件出现在父小部件之上。 【参考方案1】:

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

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

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

【讨论】:

谢谢,我明天第一件事就试试这个

以上是关于Qt 图形被另一个图形遮挡,但仍会导致绘图更新的主要内容,如果未能解决你的问题,请参考以下文章

按钮被另一个按钮遮挡,无法按下

少儿编程 电子学会图形化编程等级考试Scratch二级真题解析(选择题)2021-12

Unity3D之InstantOC(遮挡剔除)

Qt绘图学习

Threejs中的环境遮挡

ggplot2 ggsave 函数导致图形设备不显示绘图