我是 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 块将始终为 true,删除第 0 个值,但滚动以某种方式无法正常工作,因为手动设置 x 轴的最大值的工作方式,一段时间后我没有图形。如果我不调用删除,滚动工作,但我的 CPU 使用率达到 100%。
有人可以指出我在使用 remove 时如何使用滚动以保持低 CPU 使用率的正确方向吗?