gpt4 book ai didi

qt5 - 使用 Qt5 图表实现实时绘图

转载 作者:行者123 更新时间:2023-12-05 03:09:29 25 4
gpt4 key购买 nike

我是 Qt 新手,正在尝试使用 QSplineSeries 和 Qt 5.7 实现实时绘图。我需要滚动 x 轴,因为新数据每 100 毫秒进来一次。如果我不使用 graphSeriesX->remove(0) 清除附加到系列的旧数据,CPU 使用率似乎达到 100%。我发现了两种滚动 x 轴的方法。

const uint8_t X_RANGE_COUNT = 50;
const uint8_t X_RANGE_MAX = X_RANGE_COUNT - 1;
qreal y = (axisX->max() - axisX->min()) / axisX->tickCount();
m_x += y;
if (m_x > axisX->max()) {
axisX->setMax(m_x);
axisX->setMin(m_x - 100);
}

if (graphSeries1->count() > X_RANGE_COUNT) {
graphSeries1->remove(0);
graphSeries2->remove(0);
graphSeries3->remove(0);
}

上面的问题是 m_x 是 qreal 类型,有时如果我让演示持续运行,它将达到它的 MAX 值并且 axisX->setMax 调用将失败使绘图不再工作。修复此用例的正确方法是什么?

qreal x = plotArea().width() / X_RANGE_MAX;
chart->scroll(x, 0)
if (graphSeries1->count() > X_RANGE_COUNT) {
graphSeries1->remove(0);
graphSeries2->remove(0);
graphSeries3->remove(0);
}

但是我不清楚在这种情况下如何使用 graphSeriesX->remove(0) 调用。该图将不断消失,因为一旦系列附加了 X_RANGE_COUNT 值,if block 将始终为真,删除第 0 个值,但滚动以某种方式无法像手动设置 x 轴的最大值那样工作,过了一会儿我没有图形。如果我不调用 remove 但随后我的 CPU 使用率达到 100%,滚动会起作用。

有人可以指出正确的方向,告诉我如何在使用 remove 的同时使用 scroll 来保持较低的 CPU 使用率吗?

最佳答案

似乎更新 QChart 数据的最佳方式是通过 void QXYSeries::replace(QVector<QPointF> points) .来自documentation ,它比清除所有数据快得多(并且不要忘记使用向量而不是列表)。 audio example从文档中可以做到这一点。使用 setMin 更新轴, setMaxsetRange似乎都使用了大量的 CPU。我会尝试看看是否有解决方法。

关于qt5 - 使用 Qt5 图表实现实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42617860/

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