我在Windows 8上使用C ++和QT Creator与QT 5.0.2 32位MinGW。
我有一个自定义QGraphicsItem
由几条(大约20条)不同长度和宽度的水平线组成。在每行的末尾有一些数字作为文本绘制。在我的自定义项目的paint(...)
函数内部计算了一些三角函数,但这不应该那么昂贵。我也尝试部分重新绘制该项目。 paint-function看起来像这样:
void myCustomItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
使用这个伪体:
//set brush and pen etc
...
//partially repaint
painter->setClipRect( option->exposedRect );
//draw some lines
for(int i=0; i < lines; ++i)
painter.drawLine(...);
//calculate arithmetic and trigonometric stuff
....
//draw some text
for(int n=0; n < texts; ++n)
painter.drawText(...);
此QGraphicsItem
对象在QGraphicsScene
上的QGraphicsView
内呈现,并激活了抗锯齿功能。
每30ms(由QTimer
计时)它的旋转使用以下代码设置,其中(x,y)
是旋转中心,degrees
旋转值和item
是我的自定义项目是QGraphicsItem
的子类。
item.setTransform(QTransform().translate(x, y).rotate(roll).translate(-x, -y))
因此每隔30ms调用paint(...)
函数。
这导致CPU使用率高达20%以上。在视图中没有任何其他内容可供渲染,也无需在视图外部进行计算。我不确定这种操作的CPU使用率是否正常(具有相当差的CPU(带有Radeon HD Graphics的AMD A4-4355M APU))...无论如何,CPU对我来说似乎相当高。
一般来说,有没有办法尽量减少旋转和/或翻译QGraphicsItem
的计算成本?