我们正在尝试将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%(即使我在计时器中生成一个用于测试窗口小部件的正弦,这应该比空函数调用复杂得多)。我的小部件是矩形的,不透明,我想从绘图事件中处理完整的绘图程序。
是否可以减少这种开销,并由我自己处理整个绘画过程?
答案 0 :(得分:1)
“空更新”不为空 - 它重新绘制整个窗口:)
您是否阅读了以下内容?
要使用简单的背景颜色快速更新自定义窗口小部件,例如实时绘图或图形窗口小部件,最好定义合适的背景颜色(使用带有QPalette :: Window角色的setBackgroundRole()),设置autoFillBackground属性,只在widget的paintEvent()中实现必要的绘图功能。
你也应该使用QWidget::scroll()
,因为在内部它会滚动窗口的后备存储,如果只添加一个小切片,这比重新绘制整个内容要高效得多。