qpainter绘画替代品(性能在Mac上很糟糕)

时间:2011-05-22 17:40:03

标签: c++ performance qt macos paint

我有一个类在QWidget中显示音频文件的波形数据(参见下面小部件的屏幕截图,然后我仍然使用渐变,这会导致性能不佳)。

音频数据直接在小工具上使用多次调用QPainter::drawLine绘制在paintEvent中(对QWidget::drawLine的最小调用量相当于小部件的宽度=>至少一个每个x坐标的线)。 虽然该方法在Windows上运行良好(全屏的paintEvent大约需要4毫秒),但在MacOS下运行程序时,性能会下降4-5倍。

绘画的表现对于显示数据的流畅滚动非常重要。

所以我的问题是,有没有人知道更快的QPainter.drawLine替代方法来绘制线条(平台相关的解决方案可能没问题,只要它们可以在paintEvent中使用),或者有没有办法加快滚动速度某种缓冲等?

old screenshot of the widget (still used gradients, which caused poor performance)

3 个答案:

答案 0 :(得分:5)

Qt的当前版本(4.7.x)使用​​Core Graphics后端进行绘制。你发现它有时很慢。在Windows上,它使用的软件渲染器具有非常好的性能。

我的建议是不要在你的油漆事件中直接在已经通过的画家上画画。相反,创建一个与小部件绘制区域大小相同的QImage并在其上绘制。这将使用更快的软件渲染器。然后在需要时将QImage绘制到画家上。

答案 1 :(得分:4)

如果你想画得非常快,请使用OpenGL和QGLWidget

答案 2 :(得分:0)

您可以构造一个QPainterPath并绘制它,而不是重复调用drawLine函数。而且,您可以缓存路径,因此在第一次绘制后会更快。