QCustomPlot动态绘制图线,删除之前数据

今天做项目,需要动态更新QCustomPlot对象上的线,删除之前线上的数据。看了一篇博客(下面链接第二篇)发现有一个QCPGraph类有一个removeDataBefore()的方法,但是我的qcustomplot库文件没有这个函数,于是参考下面第一篇博客,自定义了removeDataBefore()函数。具体步骤如下:

1、因为我的qcustomplot版本是2.0.1,QCPGraph类里没有这个函数,在qcustomplot.h的QCPGraph类体里声明removeDataBefore()函数。

2、在qcustomplot.cpp里定义这个函数

关于这个函数里面的removeBefore涉及一些源代码没有看懂,如果有看懂的大佬欢迎在评论区留言指教。

 3、给graph对象添加值

void MainWindow::updateQCPGraph(QCustomPlot *&CP, const QStringList &xdata, const QStringList &datas)
{
    double key = 0;
    if( !xdata.isEmpty() )
    {
        QDateTime datetime = QDateTime::fromString(xdata.at(0),"yyyy.MM.dd hh:mm:ss.zzz");//转换类型
         key = (double)datetime.toMSecsSinceEpoch()/1000;//计算自1970-01-01T00:00:00以来的毫秒数
    }

    double value = 0;
    for(int j=0;j<CP->graphCount();++j)
    {
        //用addData方法更新曲线
        value = datas.at(j).toDouble();
        CP->graph(j)->addData(key , value);
        CP->graph(j)->removeDataBefore(key-18);//删除key之前xx秒的数据       
    }
}

 只保留18秒以内的数据

参考: 【Qt】解决QCustomPlot实时绘图时数据不断累积的问题_漫游宇宙sky的博客-CSDN博客_qcustomplot 大量数据

 用QCustomPlot画x轴单位是时间且实时变化的动态图_漫慢求知路的博客-CSDN博客_qcustomplot随时间变化

关于qcustomplot好的文章收集:

QCustomplot使用分享(一) 能做什么事 - 朝十晚八 - 博客园 (cnblogs.com)

Qt5--QcustomPlot使用实时动态显示总结_liefyuan的博客-CSDN博客_qcustomplot 时间轴

QT之qcustomplot的setData()和addData()的区别_七 六 伍的博客-CSDN博客_qcustomplot setdata

QT绘制实时动态曲线——qcustomplot使用(二)_梅山剑客的博客-CSDN博客_qt绘制曲线

Qt:QCustomPlot使用教程(二)——基本绘图 - ShineLe - 博客园 (cnblogs.com)

posted @ 2022-11-08 21:22  小头痛  阅读(2851)  评论(1编辑  收藏  举报