gpt4 book ai didi

c++ - 使用QwtPlotCurve进行有效曲线绘制

转载 作者:行者123 更新时间:2023-12-02 10:38:53 26 4
gpt4 key购买 nike

我有一个使用QT库绘制许多类似示波器曲线的代码库。我们正在尝试优化此应用程序的运行时间(因为我们已经达到了CPU使用率的极限)。经过一些分析后,我发现主数据绘图循环从QWT库调用了此函数:

void QwtPlotCurve::setSamples( const QVector<double> &xData, const QVector<double> &yData )
{
setData( new QwtPointArrayData( xData, yData ) );
}

每100ms完成一次。结果,每隔100毫秒,每个示波器上的每个曲线都会有一个 new调用 QwtPointArrayData对象,然后有一个 delete调用称为 QwtPointArrayData对象的先前版本。

我的问题是:是否有一种更好的更有效的方式来绘制数据而无需在每次更新时都重新分配它?

最佳答案

内存分配可能会在任何程序中造成严重的瓶颈,具体取决于调用频率。就性能而言,这是非常昂贵的指令,应该始终设计一种架构,以免发生这种情况。
有很多更好的方法,您绝对不需要为QwtPointArrayData重新分配新的内存。看一下qwt库的示例,例如示波器实时。基本上,您可以使用QwtDirectPainter及其函数drawSeries,它需要QPlotCurve以及要绘制的样本数作为参数。

https://qwt.sourceforge.io/class_qwt_plot_direct_painter.html

当然,您必须通过setSamples()或setRawSamples指令设置曲线的样本

https://qwt.sourceforge.io/class_qwt_plot_curve.html#aa51cd3fa00f2a046ca5a9889c5db2413

这是一种非常有效的方法。但是同样,请转到库的示例文件夹文件夹,以找到示波器实时示例,并研究库本身,因为可能还有其他更适合您的方法。

编辑:
起初我不明白这是库中的代码片段。我认为您应该改用setRawSamples,因为它应该更有效https://qwt.sourceforge.io/class_qwt_plot_curve.html#afd13c94e23520dacbc37b4d0fd036a8b

关于c++ - 使用QwtPlotCurve进行有效曲线绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54993973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com