我有一个类在QWidget中显示音频文件的波形数据(参见下面小部件的屏幕截图,然后我仍然使用渐变,这会导致性能不佳)。
音频数据直接在小工具上使用多次调用QPainter::drawLine
绘制在paintEvent中(对QWidget::drawLine
的最小调用量相当于小部件的宽度=>至少一个每个x坐标的线)。
虽然该方法在Windows上运行良好(全屏的paintEvent大约需要4毫秒),但在MacOS下运行程序时,性能会下降4-5倍。
绘画的表现对于显示数据的流畅滚动非常重要。
所以我的问题是,有没有人知道更快的QPainter.drawLine替代方法来绘制线条(平台相关的解决方案可能没问题,只要它们可以在paintEvent中使用),或者有没有办法加快滚动速度某种缓冲等?
答案 0 :(得分:5)
Qt的当前版本(4.7.x)使用Core Graphics后端进行绘制。你发现它有时很慢。在Windows上,它使用的软件渲染器具有非常好的性能。
我的建议是不要在你的油漆事件中直接在已经通过的画家上画画。相反,创建一个与小部件绘制区域大小相同的QImage
并在其上绘制。这将使用更快的软件渲染器。然后在需要时将QImage
绘制到画家上。
答案 1 :(得分:4)
如果你想画得非常快,请使用OpenGL和QGLWidget。
答案 2 :(得分:0)
您可以构造一个QPainterPath并绘制它,而不是重复调用drawLine函数。而且,您可以缓存路径,因此在第一次绘制后会更快。