原创 QT 使用 customplot实现绘图

2024-5-10 15:12 1942 16 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

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

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

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

写的好,学习和参考
相关推荐阅读
southcreek 2026-01-05 15:32
以太网变压器收发互换极性互换
以太网变压器的连接方法。PHY芯片的驱动TX+ TX- RX+ RX- 按图连接到以太网变压器,变压器隔离后连接到RJ-45 的 1 2 3 6 线上。连接后发现在电路板上变压器两边的线路刚好是拧着...
southcreek 2025-11-06 11:44
使用 DWT(数据观测点和跟踪单元)测量程序运行耗时
       DWT 是 ARM Cortex-M4 内核自带的硬件单元,可通过CYCCNT寄存器(32 位计数器)统计 CPU 时钟周期数,精度达1个CPU时...
southcreek 2025-10-31 17:19
多并LED液晶背光的驱动方法研究
一个4寸480*800 的液晶屏使用了一个8并的LED作为背光,手册上单灯的电流为20mA,总计160mA,导通压降为3V。需要注意如果背光超出许可电流点亮,时间长了会因为LED光衰变暗。最终无法显...
southcreek 2025-09-28 17:34
24V供电电路中踩坑
一个使用24V 供电的设备,里面需要使用PMOS管做开关,另外需要一个能充5串锂电池的充电器。设计中不慎连踩两坑,特发文纪念。电源切换电路原电路使用SI4953 双PMOS背靠背连接,作为电池供电开关...
southcreek 2025-08-07 10:17
AT32F403A BOOT0 功能异常的解决
AT32F403A  虽然使用的M4 的核,但可以兼容 Sxx32F103 使用,也就是说可以将cube生成的103程序烧到403a上直接运行。 最近一块板子使用AT32F403A 的板子...
southcreek 2025-05-07 15:06
二位半 5线数码管的驱动方法
二位半 5线数码管的驱动方法这个2位半的7段数码管只用5个管脚驱动。如果用常规的7段+共阳/阴则需要用10个管脚。如果把每个段看成独立的灯。5个管脚来点亮,任选其中一个作为COM端时,另外4条线可以单...
我要评论
1
16
关闭 站长推荐上一条 /1 下一条