C++ 以ECG方式实时显示QCustomPlot

C++ 以ECG方式实时显示QCustomPlot,c++,qt,qcustomplot,C++,Qt,Qcustomplot,我想制作一个实时图形来绘制来自Arduino的数据,我想使用QCustomPlot的以下函数以ECG样式绘制图形(几秒钟后再次开始并替换以前的数据): void QCPGraph::addData(常量QVector和键、常量QVector和值)` 使用串行端口的键=时间和值=数据 我已经有了串行数据和一个连续的图形,但我不知道如何用上面的函数修改它,并生成时间向量 你能给我一个如何调用这个函数的例子吗?如果我做对了,你有一个图表,它是xAxis范围是常数。假设它被定义为MAX_RANGEse

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

void QCPGraph::addData(常量QVector和键、常量QVector和值)`
使用串行端口的
键=时间
值=数据

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


你能给我一个如何调用这个函数的例子吗?

如果我做对了,你有一个图表,它是
xAxis
范围是常数。假设它被定义为
MAX_RANGE
seconds,并且您希望一旦它通过
MAX_RANGE
seconds,它将清除图形并从
0
秒重新开始

如果所有这些都是正确的,那么我想您已经有了一个函数,您每
T
秒调用一次,以便更新绘图。如果没有,请查看。
假设您已经有了一个每隔
T
秒调用一次的函数:

void MyPlot::updatePlot(int yValue)
然后简单地添加一个
timeCounter
作为类变量,它将在每次调用时更新。然后添加一个
if
语句,该语句将检查它是否通过了
MAX\u RANGE
。如果确实如此,则使用清除图形,添加新值并重置
计时器
。如果没有,只需添加新值即可。简单示例(只需根据您的情况进行更改):


如果我没弄错的话,你有一个图,它的范围是常数。假设它被定义为
MAX_RANGE
seconds,并且您希望一旦它通过
MAX_RANGE
seconds,它将清除图形并从
0
秒重新开始

如果所有这些都是正确的,那么我想您已经有了一个函数,您每
T
秒调用一次,以便更新绘图。如果没有,请查看。
假设您已经有了一个每隔
T
秒调用一次的函数:

void MyPlot::updatePlot(int yValue)
然后简单地添加一个
timeCounter
作为类变量,它将在每次调用时更新。然后添加一个
if
语句,该语句将检查它是否通过了
MAX\u RANGE
。如果确实如此,则使用清除图形,添加新值并重置
计时器
。如果没有,只需添加新值即可。简单示例(只需根据您的情况进行更改):


这正是我正在使用的例子。我会按照你告诉我的修改它,谢谢!如果这有助于您解决问题,请单击我答案旁边的V标记,将其视为正确答案。如果您使用
QTimer
调用函数,我不知道该示例中的t在哪里。然后,
T
被定义为您设置超时计时器的时间。例如
dataTimer.start(T)
。这正是我正在使用的示例。我会按照你告诉我的修改它,谢谢!如果这有助于您解决问题,请单击我答案旁边的V标记,将其视为正确答案。如果您使用
QTimer
调用函数,我不知道该示例中的t在哪里。然后,
T
被定义为您设置超时计时器的时间。例如
dataTimer.start(T)
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);
    }
}