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