gpt4 book ai didi

Qt 自定义小部件更新大开销

转载 作者:行者123 更新时间:2023-12-04 13:56:12 25 4
gpt4 key购买 nike

我们正在尝试将 Qt 4.8.5 用于我们公司的一些基于 Linux 的嵌入式设备。我使用没有 X 服务器的 Qt 嵌入式。我需要绘制测量数据并经常更新它们(20-30fps,但只有小部件的一小部分)。该系统是基于 ARM 的,400Mhz,没有 GPU 和 FPU。我继承了 QWidget 并覆盖了paintEvent()。我设置了 WA_OpaquePaintEvent 和 WA_StaticContents。为了测试,我的绘制事件为空,我调用小部件的 update() 函数形成一个设置为 50 毫秒的计时器。我的问题是空更新占用了 30% 的 CPU。数量随着更新的区域而变化,所以我认为QT可能会在后台重绘一些东西。我已经阅读了很多帖子,但我找不到解决我的问题的方法。如果我注释掉更新调用,CPU 使用率会下降到 ~1%(即使我在计时器中生成一个正弦值来测试小部件,这应该比空函数调用复杂得多)。我的小部件是矩形的,不透明,我想从绘制事件处理完整的绘制过程。

是否可以减少这种开销,并由我自己处理整个绘画过程?

最佳答案

“空更新”不是空的 - 它重新绘制整个窗口:)

你读过下面的吗?

要使用简单的背景颜色快速更新自定义小部件,例如实时绘图或图形小部件,最好定义合适的背景颜色(使用 setBackgroundRole() 和 QPalette::Window 角色),设置 autoFillBackground 属性,并且仅在小部件的paintEvent() 中实现必要的绘图功能。

您还应该使用 QWidget::scroll() ,因为它在内部确实滚动了窗口的后备存储,如果只添加一个小切片,这比重新绘制整个东西要高效得多。

关于Qt 自定义小部件更新大开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com