4

我们正在尝试将 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%(即使我在计时器中生成一个正弦来测试小部件,这应该比空函数调用复杂得多)。我的小部件是矩形的,不透明,我想处理来自绘制事件的完整绘图过程。

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

4

1 回答 1

1

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

你读过下面的内容吗?

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

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

于 2013-08-26T17:49:49.803 回答