gpt4 book ai didi

c++ - 如何有效地使用 QCustomPlot 绘制大型时间序列?

转载 作者:太空狗 更新时间:2023-10-29 20:58:33 24 4
gpt4 key购买 nike

我目前正在使用 QCustomPlot 在 Qt 中绘制数字信号,但似乎当样本数大于 10000000 时,操作变得非常缓慢。我有一个 time vector 和一个 data vector ,我正在这样设置数据:

QCustomPlot *plot;
QCPGraph *graph;
graph->setData(time, data);

有机会提高效率吗?

最佳答案

因为 QCustomPlot 在内部使用了一个 QCPDataMap (这是 typedefQMap<double, QCPData> )这意味着它使用映射来存储按 x 排序的实际数据坐标(键)。不幸的是 QCPGraph::setData(const QVector<double> &x, const QVector<double> &y)方法没有利用样本可以排序的事实,也没有使用插入提示,因此这显着改善了结果:

QCPDataMap *data = new QCPDataMap();
size_t len = x.size();
auto xp = std::begin(x);
auto yp = std::begin(y);
while (len--)
data->insertMulti(data->constEnd(), *xp, QCPData(*xp++, *yp++));
graph->setData(data);

我不认为std::map s 或 QMap s 是在 X、Y 图上存储样本的最佳结构,因为 map 中的每个条目都会进行新的分配和释放,我们正在谈论数百万个条目。 QCustomPlot 应该使用自定义分配器实现自定义 map 类,以避免这些内存问题。

关于c++ - 如何有效地使用 QCustomPlot 绘制大型时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27417703/

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