QCustomplot绘图性能的改善

QCustomPlot采用了诸如自适应采样和文本对象缓存之类的各种技术,以减少重新绘制所需的时间。但是,某些功能(如复杂的半透明填充和粗线)仍会导致速度显着下降。如果您在应用程序中注意到这一点,这里有一些有关如何提高重复打印性能的提示。

到目前为止,大部分时间都花在了绘图功能上,尤其是在绘制高密度图和其他绘图表时。为了获得最佳性能,请考虑以下几点:

  1. 特别是在图形,粗线,半透明颜色下/之间使用复杂的填充时:通过QCustomPlot :: setOpenGl启用QCustomPlot的OpenGL硬件加速渲染。有关如何正确启用OpenGL加速的详细信息,请参见此处的文档。OpenGL加速可用于QCustomPlot支持的所有Qt版本,并且分别选择了相应的后端。 对于5.0之前的Qt版本,QCustomPlot自己的OpenGL加速的替代方法是在创建QApplication对象之前提供“ -graphicssystem opengl”作为命令行参数或进行调用。这样可以实现应用程序范围的OpenGL加速。
    QApplication::setGraphicsSystem(“opengl”)
    请注意,使用OpenGL加速,最大帧速率可能会受到显示器垂直同步频率的限制(可以在图形卡驱动程序配置中禁用VSync)。因此,对于简单绘图(潜在帧速率远高于每秒60帧),OpenGL加速可能会在数值上低于默认软件渲染器,因为它没有限制在VSync频率上。
  2. 避免笔宽度大于一的线。这与默认软件渲染器尤其相关,而与OpenGL加速无关。
  3. 避免复杂的填充,例如,在具有数千个点的图形之间进行通道填充。这与默认软件渲染器尤其相关,而与OpenGL加速无关。
  4. 如果仅由于非复杂对象(例如,某项)已更改而在图中具有相对静态但复杂的图形时,通常需要调用完整的QCustomPlot :: replot,请考虑将定期更改的对象放置在自己的图层上并对其进行设置模式(QCPLayer :: setMode)到QCPLayer :: lmBuffered。这使QCustomPlot为该层分配了专用的绘制缓冲区,并允许使用QCPLayer :: replot对其进行单独重新绘制,而与包含潜在复杂图和慢图的其他层无关。有关详细信息,请参见相应方法的文档。
  5. 仅Qt4:使用Qt 4.8或更高版本。与Qt 4.7相比,性能提高了两倍或三倍。但是,QPainter损坏了,并且绘制像散点图这样的像素精确元素的效果不如Qt 4.7好。因此,切换到Qt 4.8时,是性能与绘图质量之间的折衷。QCustomPlot在内部尝试解决此类最严重的故障。
  6. 要在范围拖动期间提高响应速度,请考虑将QCustomPlot :: setNoAntialiasingOnDrag设置为true。仅在使用默认软件渲染器时才有意义。(OpenGL抗锯齿不能即时切换,这需要对样本缓冲区进行昂贵的重新分配。)
  7. 仅限于Qt4:在X11(GNU / Linux)上,请避免使用较慢的本机绘图系统,通过提供“ -graphicssystem raster”作为命令行参数或在创建QApplication对象之前调用来使用栅格QApplication::setGraphicsSystem(“raster”)。
  8. 避免使用任何类型的alpha(透明)颜色,尤其是在填充中。
  9. 避免任何形式的抗锯齿,尤其是在图形行中(请参见QCustomPlot :: setNotAntialiasedElements)。仅在使用默认软件渲染器时才有意义。
  10. 避免重复设置完整的数据集,例如使用QCPGraph :: setData。如果大多数数据点保持不变,例如在运行的测量中,请改用QCPGraph :: addData。您可以通过QCPGraph :: data访问和操作现有数据。
  11. 作为最后的选择,请尝试减少任何给定时刻在可见键范围内的数据点数量,例如通过限制最大键范围跨度(请参阅QCPAxis :: rangeChanged信号)。QCustomPlot可以非常有效地优化掉数百万个屏幕外点。

猜你喜欢

转载自blog.csdn.net/feiyangqingyun/article/details/108779361