从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()
{
QString data = serial->readAll();
buf->append(data);
ui->lineEdit->setText(data);
DripDataPharese(buf);
ui->customPlot->addGraph();
ui->customPlot->graph(0)->setData(idx, vec);
ui->customPlot->xAxis->setLabel("x");
ui->customPlot->yAxis->setLabel("y");
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向量中。
QVector idx(PLOTBUFSIZE),vec(PLOTBUFSIZE);
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 1;j++){
if(datlist.at(j).count() == 2*100){
for(int i = 0;i<100;i++){
idx[index] = index