tag 标签: customPlot

相关博文
  • 热度 4
    2024-5-10 15:12
    1262 次阅读|
    1 个评论
    从customPlot 官网下载需要的源文件。 将qcustomplot类中的源文件加入到工程里。 在工程文件中增加 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11 lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11 主要是增加 printsupport支持 Ui文件中增加一个qobject,并提升为qcustomplot 定义存放点的向量 #define PLOTBUFSIZE 1000 QVector idx(PLOTBUFSIZE),vec(PLOTBUFSIZE); Customplot 只支持double向量。 向量可以自行生成,或从文件中读入,或从通信号获得。这里是从串口获得。 初始化时连接串口到槽函数 readData() connect(serial, &QSerialPort::readyRead, this, &MainWindow::readData); void MainWindow:: readData () { readAll(); append(data); // QStringList datlist = data.split(",",QString::SkipEmptyParts); setText(data); DripDataPharese( buf ); // create graph and assign data to it: addGraph(); setData(idx, vec); // give the axes some labels: setLabel("x"); setLabel("y"); // set axes ranges, so we see all data: setRange(0, 1000); setRange(0,4096); replot(); setInteractions(QCP::iRangeDrag | QCP::iRangeZoom); } 这个 DripDataPharese函数负责从串口接收到的数据进行解析。找到以”DATA”开头的包,将包里的数据整合到idx 和 vec向量中。 #define PLOTBUFSIZE 1000 QVector idx(PLOTBUFSIZE),vec(PLOTBUFSIZE); void DripDataPharese (QString *buf){ static int16_t index = 0; indexOf("DATA"); if((pos != -1)&&(pos != 0)) remove(0,pos); split("DATA",QString::SkipEmptyParts); 1){ for(int j = 0;j < datlist.count()-1;j++){ if(datlist.at(j).count() == 2*100){ for(int i = 0;i<100;i++){ idx = index; vec = datlist.at(j).at(i*2).toLatin1() + (datlist.at(j).at(i*2+1).toLatin1()<<8); index++; index %= PLOTBUFSIZE; } } remove(0,datlist.at(j).count()+4); } } 这样就能把数据显示出来,并且还能使用鼠标缩放和拖曳。比qchartview似乎更简单一点。