从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
Customplot 只支持double向量。
向量可以自行生成,或从文件中读入,或从通信号获得。这里是从串口获得。
初始化时连接串口到槽函数 readData()
connect(serial, &QSerialPort::readyRead, this, &MainWindow::readData);
void MainWindow::readData()
{
QString data = serial->readAll();
buf->append(data);
// QStringList datlist = data.split(",",QString::SkipEmptyParts);
ui->lineEdit->setText(data);
DripDataPharese(buf);
// create graph and assign data to it:
ui->customPlot->addGraph();
ui->customPlot->graph(0)->setData(idx, vec);
// give the axes some labels:
ui->customPlot->xAxis->setLabel("x");
ui->customPlot->yAxis->setLabel("y");
// set axes ranges, so we see all data:
ui->customPlot->xAxis->setRange(0, 1000);
ui->customPlot->yAxis->setRange(0,4096);
ui->customPlot->replot();
ui->customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
}
这个DripDataPharese函数负责从串口接收到的数据进行解析。找到以”DATA”开头的包,将包里的数据整合到idx 和 vec向量中。
#define PLOTBUFSIZE 1000
QVector
void DripDataPharese(QString *buf){
static int16_t index = 0;
int pos = buf->indexOf("DATA");
if((pos != -1)&&(pos != 0))
buf->remove(0,pos);
QStringList datlist = buf->split("DATA",QString::SkipEmptyParts);
if(datlist.count() > 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] = index;
vec[index] = datlist.at(j).at(i*2).toLatin1() + (datlist.at(j).at(i*2+1).toLatin1()<<8);
index++;
index %= PLOTBUFSIZE;
}
}
buf->remove(0,datlist.at(j).count()+4);
}
}
这样就能把数据显示出来,并且还能使用鼠标缩放和拖曳。比qchartview似乎更简单一点。
作者: southcreek, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-408807.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
开发工匠 2024-5-13 12:00