VX:13225601016       获取源码和数据集

github:GitHub - supershifeiyu/serial_test: Qt串口数据采集并实时绘图

serial_test.pro

#-------------------------------------------------
#
# Project created by QtCreator 2022-03-23T20:06:19
#
#-------------------------------------------------QT       += core gui serialport chartsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = serial_test
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0CONFIG += c++11SOURCES += \main.cpp \widget.cpp \chart.cppHEADERS += \widget.h \chart.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

chart.h

#ifndef CHART_H
#define CHART_H#include <QtCharts>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QtCharts/QSplineSeries>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QTimer>
#include "QDateTime"
#include <QWidget>class Chart : public QWidget
{Q_OBJECT
public:explicit Chart(QWidget *parent = nullptr);void init_chart(QString title = tr("无线传输模块调试"), qint16 min =0 ,qint16 max= 30000);//表格初始化void draw_line(QDateTime current_time, double number);//画线~Chart();private slots:void save(QDateTime start_time,QDateTime end_time);//保存图表
private:QTimer *timer;                           //计时器QChartView *chartView;QChart *chart;                           //画布QSplineSeries *series;                     //线QDateTimeAxis *axisX;                    //轴QValueAxis *axisY;
};#endif // CHART_H

widget.h

#ifndef CHART_H
#define CHART_H#include <QtCharts>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QtCharts/QSplineSeries>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QTimer>
#include "QDateTime"
#include <QWidget>class Chart : public QWidget
{Q_OBJECT
public:explicit Chart(QWidget *parent = nullptr);void init_chart(QString title = tr("无线传输模块调试"), qint16 min =0 ,qint16 max= 30000);//表格初始化void draw_line(QDateTime current_time, double number);//画线~Chart();private slots:void save(QDateTime start_time,QDateTime end_time);//保存图表
private:QTimer *timer;                           //计时器QChartView *chartView;QChart *chart;                           //画布QSplineSeries *series;                     //线QDateTimeAxis *axisX;                    //轴QValueAxis *axisY;
};#endif // CHART_H

chart.cpp

#include "chart.h"Chart::Chart(QWidget *parent): QWidget(parent)
{timer = new QTimer(this);timer->start();timer->setInterval(1000);    //设置定时周期//创建定时器
}
void Chart::init_chart(QString title, qint16 min,qint16 max)
{QPen penY(Qt::darkBlue,3,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin);chartView = new QChartView(this);chartView->resize(1600,1000);chart = new QChart();chart->setTitle(title);series = new QSplineSeries;axisX = new QDateTimeAxis();axisY = new QValueAxis();chart->legend()->hide();                             //隐藏图例chart->addSeries(series);                            //把线添加到chartchart->setTheme(QChart::ChartThemeDark);axisX->setTickCount(10);                             //设置坐标轴格数axisY->setTickCount(5);axisX->setFormat("hh:mm:ss");                        //设置时间显示格式axisY->setMin(min);                                    //设置Y轴范围axisY->setMax(max);axisX->setTitleText("实时时间");                       //设置X轴名称axisY->setLinePenColor(QColor(Qt::darkBlue));        //设置坐标轴颜色样式axisY->setGridLineColor(QColor(Qt::darkBlue));axisY->setGridLineVisible(true);                    //设置Y轴网格显示axisY->setLinePen(penY);axisX->setLinePen(penY);chart->addAxis(axisX,Qt::AlignBottom);               //设置坐标轴位于chart中的位置chart->addAxis(axisY,Qt::AlignLeft);series->attachAxis(axisX);                           //把数据添加到坐标轴上series->attachAxis(axisY);axisY->setTitleText("y");//把chart显示到窗口上chartView->setChart(chart);//chartView->setRenderHint(QPainter::Antialiasing);   //设置抗锯齿
}void Chart::draw_line(QDateTime current_time, double number)
{//设置坐标轴显示范围chart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-60 * 1));       //系统当前时间的前一秒chart->axisX()->setMax(QDateTime::currentDateTime().addSecs(0));            //系统当前时间                        //这里生成随机数做测试//增加新的点到曲线末端series->append(current_time.toMSecsSinceEpoch(), number);
}void Chart::save(QDateTime start_time,QDateTime end_time)
{chart->axisX()->setMin(start_time);chart->axisX()->setMax(end_time);QPixmap p = chartView->grab();QImage image = p.toImage();QString filename = QFileDialog::getSaveFileName(this,tr("Save Image"),"",tr("*.bmp;; *.png;; *.jpg;; *.tif;; *.GIF")); //选择路径if (filename.isEmpty()){return;}else{if (!(image.save(filename))) //保存图像{QMessageBox::information(this,tr("Failed to save the image"),tr("Failed to save the image!"));return;}}
}Chart::~Chart()
{delete chart;
}

widget.cpp

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{this->setFixedSize(1620,1080);port = new QComboBox();port->addItem(tr("端口号"));port->addItem(tr("COM1"));port->addItem(tr("COM2"));port->addItem(tr("COM3"));port->addItem(tr("COM4"));port->addItem(tr("COM5"));baud = new QComboBox();baud->addItem(tr("波特率"));baud->addItem(tr("1200"));baud->addItem(tr("2400"));baud->addItem(tr("4800"));baud->addItem(tr("9600"));baud->addItem(tr("19200"));baud->addItem(tr("38400"));baud->addItem(tr("57600"));baud->addItem(tr("115200"));start = new QPushButton(tr("开始采集"));end = new QPushButton(tr("结束采集"));QHBoxLayout *top_lay = new QHBoxLayout();//上方布局top_lay->addWidget(port,0);top_lay->setStretchFactor(port,1);top_lay->addWidget(baud,1);top_lay->setStretchFactor(baud,1);top_lay->addWidget(start,2);top_lay->setStretchFactor(start,1);top_lay->addWidget(end,3);top_lay->setStretchFactor(end,1);top_lay->setMargin(10);top_lay->setSpacing(5);chart = new Chart();chart->init_chart("无线模块调试",-100,100);QVBoxLayout *main_lay = new QVBoxLayout(this);main_lay->addLayout(top_lay,0);main_lay->setStretchFactor(top_lay,1);main_lay->addWidget(chart,1);main_lay->setStretchFactor(main_lay,10);main_lay->setMargin(10);main_lay->setSpacing(5);global_port.setParity(QSerialPort::NoParity);//校验位global_port.setDataBits(QSerialPort::Data8);//数据位global_port.setStopBits(QSerialPort::OneStop);//停止位global_port.setFlowControl(QSerialPort::NoFlowControl);//流控制一般没用
//    global_port.setPortName("COM4");
//    global_port.setBaudRate(QSerialPort::Baud2400);connect(start,SIGNAL(clicked()),this,SLOT(start_collect()));connect(end,SIGNAL(clicked()),this,SLOT(end_collect()));connect(port,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,&Widget::port_handle);connect(baud,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,&Widget::baud_handle);connect(&global_port ,SIGNAL(readyRead()) , this ,SLOT(on_readyRead()));
}
void Widget::port_handle(int index)//端口号槽函数
{switch(port->currentIndex()){case 1:global_port.setPortName("COM1");break;case 2:global_port.setPortName("COM2");break;case 3:global_port.setPortName("COM3");break;case 4:global_port.setPortName("COM4");break;case 5:global_port.setPortName("COM5");break;}
}
void Widget::baud_handle(int index)//波特率槽函数
{switch(baud->currentIndex()){case 1:global_port.setBaudRate(QSerialPort::Baud1200);break;case 2:global_port.setBaudRate(QSerialPort::Baud2400);break;case 3:global_port.setBaudRate(QSerialPort::Baud4800);break;case 4:global_port.setBaudRate(QSerialPort::Baud9600);break;case 5:global_port.setBaudRate(QSerialPort::Baud19200);break;case 6:global_port.setBaudRate(QSerialPort::Baud38400);break;case 7:global_port.setBaudRate(QSerialPort::Baud57600 );break;case 8:global_port.setBaudRate(QSerialPort::Baud115200);break;}
}
void Widget::start_collect()
{qDebug() << global_port.portName() << global_port.baudRate();global_port.open(QSerialPort::ReadWrite);
}
void Widget::on_readyRead()
{buff = global_port.readAll();double number = (buff[0]-'0')*10 + (buff[1]-'0');qDebug() << number;chart->draw_line(QDateTime::currentDateTime(),number);
}
void Widget::end_collect()
{global_port.close();
}
Widget::~Widget()
{delete this;
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

Qt 串口数据采集并绘图相关推荐

  1. Qt qextserial进行串口数据采集,qcustomplot进行绘图,曲线实时显示横纵坐标辅助线

    Qt qextserial进行串口数据采集,qcustomplot进行绘图,曲线实时显示横纵坐标辅助线 目的.要求: A.读取RS422接口接收到的全部数据: 1.通过接口读取板卡采集的数据,采用多线 ...

  2. QT串口动态实时显示大量数据波形曲线(二)========“chart绘图与波形观察”

    上篇文章介绍了串口的设置,以下介绍初步画图. 前言 感觉绘图才是QT等面向对象编程的最好特例.做完之后能感觉到这点是和在单片机或者ARM上逻辑编程最大的区别. 绘图步骤: (1)采用QT自带chart ...

  3. QT串口动态实时显示大量数据波形曲线(一)========“串口设置与ui界面添加(灯与按钮)”

    序言     项目背景:底层硬件每10ms按照通讯协议通过串口上传40个8位数据,上位机制作软件接收数据并实时绘图. 项目参数:(1)每10ms传输40个8位数据:(2)每1s将接收数据按照通讯协议( ...

  4. QT开发(五十)——QT串口编程基础

    QT开发(五十)--QT串口编程基础 一.QtSerialPort简介 1.串口通信基础 目前使用最广泛的串口为DB9接口,适用于较近距离的通信.一般小于10米.DB9接口有9个针脚. 串口通信的主要 ...

  5. 【转】QT 串口QSerialPort + 解决接收数据不完整问题

    [转]QT 串口QSerialPort + 解决接收数据不完整问题 参考文章: (1)[转]QT 串口QSerialPort + 解决接收数据不完整问题 (2)https://www.cnblogs. ...

  6. QT技术应用_2D绘图(转)

    QT技术应用_2D绘图(转) 分类: 与企业共成长 2011-06-03 13:02 6170人阅读 评论(0) 收藏 举报 qt图形存储postscript框架windows http://www. ...

  7. QT串口2--控制GSM模块的使用

    1.首先介绍下所用的gsm模块,YYROBOT_SIM800C 模块是一款高性能高性价比工业级的 GSM/GPRS 模块(开发板).本模块采用 SIMCOM 公司的工业级四频 850/900/1800 ...

  8. qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)

    Qt 串口通信程序全程图文 是本文介绍的内容,在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourc ...

  9. Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...

最新文章

  1. Linux下KVM的图形界面管理工具(virt-manager)(桌面版)
  2. python绘制好几个子图_python绘制多个子图的实例
  3. linux-VM无法连接mks套接字连接尝试次数太多
  4. java 拆箱 类型不对,Java基本类型于对象类型的拆箱和装箱
  5. [leetcode双周赛]5312. 大小为 K 且平均值大于等于阈值的子数组数目
  6. 联想Z5 Pro划时代旗舰发布,屏占比95.06%售价1998元起
  7. MAPZONE GIS SDK接入Openlayers3之二——空间参考扩展
  8. spring boot jpa SQL语句注意事项
  9. 简述prototype, _proto_, constructor三者的关系
  10. 使用两个栈实现一个队列
  11. css3 border渐变实现
  12. php简单答题系统,念做个简易php选择题答题系统
  13. 使用enum代替Constants
  14. python制作电脑软件_python制作一个桌面便签软件 -电脑资料
  15. 本地主机Xshell连接虚拟机Linux CentOS7
  16. 自建ngrok服务支持https访问
  17. CC2530驱动_ds18b20
  18. Windows系统——ATTCK靶场(一)——MSF方式
  19. ORACLE ASMM与AMM的总结
  20. 队列及其应用-取牌游戏

热门文章

  1. 育碧魁北克-刺客信条:奥德赛
  2. 高项_第十章项目沟通管理
  3. jmap 和jstack使用
  4. 输入关键字的爬虫方法(运行环境python3)
  5. VGG网络讲解——小白也能懂
  6. PHPMyWind支持PowerPoint导入
  7. 百度网盘准备好,测绘相关资料
  8. Spring4 介绍
  9. 32位系统的内存访问
  10. 使用CLIP构建视频搜索引擎