|
问题简述:tq2440 linux qt4.5环境下,在一个画直线的程序中,主窗口中定义了多个QLabel对象,造成CPU不堪重负
具体描述:
我在主窗口(继承自QWidget类)的左半边画一些直线,画线的频率大约是10条/秒,画线的操作是重载paintEvent函数完成的。
因为画线后需要马上显示,所以没有用update(),我调用的是QWidget类的函数repaint(int x,int y,int w,int h)来发出绘图事件,每次repaint的区域不超过10*30
主窗口右边是8个QLabel,这些QLabel都是我用Qt Creator1.3.0 里的界面设计工具加上去的。
我把这个程序移植到开发板上,开发板是tq2440,Linux系统,已经移植了qt4.5运行环境。从pc的ftp登陆到开发板,cd到程序所在目录,用命令 ./xxxxx -qws启动程序(xxxx是程序名)
问题来了:这个程序在开发板上运行时,开发板CPU占用率达到了60%,这个CPU占用率也太夸张了
我做的测试:我把8个QLabel减到了只剩4个,CPU占用率下降到了40%;我把剩下的4个QLabel也删了,然后在程序中自己定义它们,并且去掉了QLabel的字体、背景等设置,
CPU占用率下降到15%。看来的确是QLabel的问题。
疑问:为什么QLabel会占用这么多CPU资源?
我怀疑repaint的时候也会去刷新QLabel。但是我每次调用repaint的时候都是在repaintd的参数里面指定了一块很小的区域(10*30),并且保证这个区域不会覆盖到那8个QLabel
的位置,为什么重画的时候还会去刷新QLabel? |
|