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

sme*_*lin 8 c++ macos performance qt paint

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

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

绘画的性能对于显示数据的流体滚动很重要.

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

小部件的旧屏幕截图(仍然使用渐变,导致性能不佳)

Ste*_*Chu 5

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

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