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

时间:2013-08-04 13:34:41

标签: qt qtembedded custom-widgets

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

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

1 个答案:

答案 0 :(得分:1)

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

您是否阅读了以下内容?

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

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