我有一个类,它显示了QWidget中的audiofiles的波形数据(请参阅下面的小部件的屏幕截图,那时我仍然使用渐变,这导致了糟糕的性能)。qpainter绘画替代品(在Mac上表现糟糕)
的音频数据在的paintEvent绘直接使用多次调用QPainter::drawLine
微件(呼叫的最小量QWidget::drawLine
相当于插件=>至少一条线的宽度对于每个x坐标)。 虽然这种方法在Windows上运行得非常好(全屏幕中的paintEvent大约需要4ms),但是当程序在MacOS下运行时,性能会降低4-5倍。
绘画的性能对于显示数据的流体滚动很重要。
所以我的问题是,有没有人知道一个更快的替代QPainter.drawLine绘制线(平台相关的解决方案可能是好的,只要他们可以在paintEvent中使用),或有一种方法来加速滚动,某种缓冲等?
我们正在使用qt 4.4,我已经尝试先在QPixmap上绘制数据,然后将小部件绘制到小部件上,但加速效果并不理想(QPainter :: drawLine在绘制像素图时并不明显) – smerlin 2011-05-22 18:06:28
我记得QPixmap与QImage的不同之处在于QPixmap使用平台“加速”后端。在OS X中,这意味着它仍然是Core Graphics。使用QImage将确保您使用的是软件渲染器。 – 2011-05-22 20:40:49
@smerlin QPixmap针对在屏幕上显示图像进行了优化,而QImage针对I/O进行了优化。如果你使用QPixmap绘制线条,那么它会变慢。 – Arlen 2011-05-24 04:53:03