我有一个在QWidget中显示音频文件波形数据的类(参见下面的小工具截图,当时我仍然使用渐变,这会导致性能很差)。
音频数据是通过多次调用QPainter::drawLine直接在小部件的paintEvent中绘制的(对QWidget::drawLine的最小调用数量相当于小部件的宽度=>,每个x坐标至少一行)。虽然这种方法在Windows上运行得很好(全屏模式下的paintEvent大约需要4ms),但当程序在MacOS下运行时,性能要差4-5倍。
绘画的性能对于显示数据的流畅滚动非常重要。
所以我的问题是,有没有人知道一个更快的替代QPainter.drawLine来绘制线条(平台相关的解决方案可能是可以的,只要他们可以在paintEvent中使用),或者有一种方法来加快滚动,某种缓冲等?

发布于 2011-05-23 02:02:32
Qt的当前版本(4.7.x)使用Core Graphics后端进行绘制。正如你所发现的,它有时会很慢。在Windows上,它使用了一个性能非常好的软件渲染器。
我的建议是不要在paint事件中直接在传递的painter上进行绘制。相反,您可以创建一个与小部件绘制区域大小相同的QImage并在其上进行绘制。这将使用速度更快的软件渲染器。然后在需要时将QImage绘制到画笔上。
发布于 2011-05-23 04:46:54
如果你想画得很快,可以使用OpenGL和QGLWidget。
发布于 2011-05-23 02:25:21
您可以构造一个QPainterPath并绘制它,而不是重复调用drawLine函数。此外,您可以缓存路径,因此在第一次绘制后速度会快得多。
https://stackoverflow.com/questions/6089642
复制相似问题