QT 5.0中疯狂的CPU使用率

时间:2013-07-03 11:03:04

标签: c++ qt drawing cpu cpu-usage

我在使用QT框架时遇到了问题,尤其是paintEvent的{​​{1}}。我设置了QWidget,并且正在覆盖它的QWidget。我需要渲染一堆矩形(网格系统),51乘19,导致绘制969个矩形。这是在for循环中完成的。然后我还需要在这些网格的每个上面绘制一个图像。 paintEvent已添加到显示的QWidget

这很好用,但是每个窗口打开使用47%的CPU!我希望允许用户打开这样的多个窗口,比如一次打开3-4个,这使CPU接近150%。

为什么会这样?这是QMainWindow内容。 JNI调用不会导致CPU使用率,注释掉它们不会降低它,但注释掉paintEventp.fillRect(绘制图像)会将CPU降低到大约5%。 / p>

Renderer::renderString

1 个答案:

答案 0 :(得分:0)

你遇到的问题是,每次你在QPainter上调用绘图功能时,它都需要设置画家的开销,特别是当笔和画笔需要改变时。当您调用该函数超过900次时,这超过了Painter需要更改其内部属性以进行渲染的900倍,并解释了为什么注释掉drawRect和drawString函数会降低CPU使用率。

要解决此问题,您需要批量处理所有相同类型的绘制调用,其中类型使用相同的笔刷和笔。为此,您可以使用类QPainterPath并使用addRect(..)等函数添加所需的对象;确保你在绘画功能之外做到这一点!

例如,如果您打算绘制棋盘图案,则会创建两个QPainterPath对象,并将所有白色方块添加到一个,将所有黑色添加到另一个。然后说到绘图使用QPainter函数drawPath。这只需要两次调用来绘制整个电路板。

当然,如果你需要每个方格都是不同的颜色,那么你仍然会遇到同样的问题,在这种情况下,我建议你想要生成一个你需要的图像,然后再渲染它。 / p>