我想制作一个实时图形来绘制来自Arduino的数据,我想使用QCustomPlot中的以下函数以ECG样式绘制图形(几秒钟后重新开始并替换以前的数据):

void QCPGraph::addData(const QVector<double> &keys, const QVector<double> &values)`


从串行端口使用keys=timevalues=data

我已经有了串行数据和一个连续的图形,但是我不知道如何使用上面的函数修改它并创建时间向量。

您能举一个如何调用该函数的例子吗?

最佳答案

如果我做对了,您会发现它的xAxis范围是恒定的。可以说它被定义为MAX_RANGE秒,并且您希望它经过MAX_RANGE秒后将清除图形并从0秒重新开始。

如果一切正确,那么我想您已经有一个函数,每T秒调用一次以更新绘图。如果没有,请查看this example
假设您已经有一个每T秒调用一次的函数:

void MyPlot::updatePlot(int yValue)


然后只需添加timeCounter作为类变量,该变量将在每次调用时更新。然后添加if语句,该语句将检查是否通过了MAX_RANGE。如果确实如此,则使用clearData()清除图形,添加新值并重置timeCounter。如果没有,则只需添加新值。简单示例(只需进行更改以适合您的情况):

void MyPlot::updatePlot(int yValue){
    this->timeCounter += T;
    if (this->timeCounter >= MAX_RANGE) {
        ui->customPlot->graph(0)->clearData();
        ui->customPlot->graph(0)->addData(0, yValue);
        this->timeCounter = 0;
    }
    else {
        ui->customPlot->graph(0)->addData(this->timeCounter, yValue);
    }
}

09-27 04:41