Qt Chart系列去除未显示数据崩溃

Qt Chart Series remove not shown data crashes

我正在尝试在 qt 中制作实时绘图图 class 并且滚动有效。 但是当在任务管理器中观看我的程序时,我发现 CPU 和 RAM 使用量随着时间(和数据)的增加而增加。

所以我认为使用remove函数来删除无论如何都没有显示的数据会是一个很好的风格。 这是我的代码:

void Live_Chart::UpdateY(float yValue)
{
xValue++;
this->yValue = yValue;
m_series->append(xValue, yValue);

if (xValue > m_axisX->max())
{
    // "Scroll" the data in the view
    m_axisX->setMax(xValue);
    m_axisX->setMin(m_axisX->min()+1);

    // Remove the previous data we don't see
    qDebug() << "Removing " << m_axisX->min();
    m_series->remove(m_axisX->min());
}
}

此方法每 100 毫秒调用一次,随机数介于 0 和 10 之间。

但总是在达到 removing=52 时程序崩溃并显示此错误消息:

ASSERT failure in QVector<T>::remove: "index out of range", file c:\users\qt\work\qt\qtbase\include\qtcore\../../src/corelib/tools/qvector.h, line 483

我真的不知道为什么是 52。我的程序的任何部分都没有指定这个数字。 x 轴的范围是 50。在创建 QLineSeries 时,我添加了点 (0, 0)。

编辑: 当使用 m_axisX 范围 (0, 20) 时,程序在尝试删除点 22 时崩溃。

--> 删除 x = x-range + 2 的点时程序崩溃(也用其他数字测试过)。

您混淆了向量 m_series 中数据点的索引及其 x 值。当带有 x = old_x_min 的数据点超出您要显示的 window 时,该数据点位于索引 0 而不是索引 old_x_min.

替换

m_series->remove(m_axisX->min());

m_series->remove(0);

删除最旧的数据点,而不是系列中间的一些数据点。