原创 QT 使用 customplot实现绘图

2024-5-10 15:12 647 4 4 分类: MCU/ 嵌入式 文集: QT学习

从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);

// 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 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 < 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

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

开发工匠 2024-5-13 12:00

写的好,学习和参考
相关推荐阅读
southcreek 2024-06-06 08:52
QT 使用QSettings 操作ini文件配合表格操作
这个项目可以演示 使用QSetting 读取或写入 ini文件。并使用tablewidget 显示。Ini文件的格式如下,这个文件可以事先编写。也可以在程序中生成。有一个大类,下面有一个小类使用等号设...
southcreek 2024-05-27 16:18
差分输入ADC的单端到差分转换器驱动设计
单端信号需要转换成差分信号,以便使用ADC进行转换。这个就所谓的ADC驱动电路。需要的结果为Vp = Vcm + Vi/2Vn = Vcm – Vi/2这样 Vp – Vn = Vi使用简单的加法器和...
southcreek 2024-04-19 12:15
步进电机运动控制
这个项目使用步进电机高速启停并换向。需要在尽可能短时间完成相应的圈数。常用的线性加速启停的时候有很大的噪声。需要做一点运动控制。达到加速度变化连续的效果。7段加减速控制策略分t1~t7 7个阶段,A...
southcreek 2024-04-16 09:32
IR LED闪光电路设计及优化
设计的目标是产生IR LED闪光,供后面的检测电路使用。使用一个LDO,将IR LED阳极接到LDO输出端,串联一个采样电阻接到地,采样电阻另一端接到LDO 反馈输入。当LDO的EN端被 PWM波驱...
southcreek 2024-03-13 12:11
一个不成功的隔离DAC设计
需要设计一个隔离的输出一个可变电压的电路要求是 0~12V 隔离端供电为12V。输出电压基本无速度要求。精度也无特别要求,只是设置好后就稳住不要变。设计一个光耦发光端由MCU的PWM驱动,输出端上...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /6 下一条