高CPU使用率旋转QGraphicsItem

时间:2013-06-10 16:21:39

标签: c++ qt render antialiasing qgraphicsitem

我在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的计算成本?

0 个答案:

没有答案