Qt 动态实时显示波形图

动态实时显示波形

  • Qt 动态实时显示波形图
  • 一、获取串口数据
      • 添加头文件
    • 1、实例化一个串口对象
    • 2、设置参数
    • 3、设置端口(以COM12为例)
    • 4、设置波特率(以9600为例)
    • 5、打开串口
    • 6、读取串口 , 返回一个array
  • 二、QtCharts绘制
    • 1、定义
    • 2、配置
    • 3、UI设计
    • 4、定时器的配置
    • 5、开始画图
    • 6、效果展示
  • 三、获取代码

一、获取串口数据

串口数据的发送和接收过程,我们需要单独的添加串口的相关模块进去,模块名称叫做serialport , 同理下面绘制波形图所需的模块叫做charts;

QT  += core gui serialport charts

添加头文件
#include <QtSerialPort>
#include <QtCharts/QChartView>
#include <QtCharts/QSplineSeries>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QTimer>
#include "QDateTime"

1、实例化一个串口对象

QSerialPort global_port;

2、设置参数

校验位 , 数据位 , 停止位等,再将信号与槽函数连接起来。

     global_port.setParity(QSerialPort::NoParity);global_port.setDataBits(QSerialPort::Data8);global_port.setStopBits(QSerialPort::OneStop);connect(ui->Open, SIGNAL(Open_clicked()),this,SLOT(on_Open_clicked()));connect(ui->Close , SIGNAL(Close_clicked()) , this , SLOT(on_Close_clicked()));connect(&global_port ,SIGNAL(readyRead()) , this ,SLOT(on_readyRead()));

3、设置端口(以COM12为例)

  global_port.setPortName("COM12");

4、设置波特率(以9600为例)

 global_port.setBaudRate(QSerialPort::Baud9600);

5、打开串口

参数:模式(只读 , 只写 , 读写等)

 global_port.open(QSerialPort::ReadWrite);

6、读取串口 , 返回一个array

 global_port.readAll();```c++#### 7、关闭串口
```c++
global_port.close();

二、QtCharts绘制

1、定义

想要绘制曲线图需要定义画布 , 线 , 轴 , 如果要实时显示的需要借助定时器,隔一段时间 , 增加新的点到曲线末尾。

 QTimer *timer;                           //计时器QChart *chart;                           //画布QSplineSeries *series;                     //线QDateTimeAxis *axisX;                    //轴QValueAxis *axisY;
2、配置

下面是对画布线 轴 的配置 ( 比较简单 , 有对应的注释)

QPen peny(Qt::darkRed , 3 , Qt::SolidLine , Qt::RoundCap , Qt::RoundJoin);
chart = new QChart();
series = new QSplineSeries();
axisX = new QDateTimeAxis();
axisY = new QValueAxis();chart->legend()->hide();        //隐藏图例
chart->addSeries(series);       //把线添加到chart中
axisX->setTickCount(10);   //设置坐标轴格数
axisY->setTickCount(5);axisX->setFormat("hh:mm:ss");       //设置线式格式
axisY->setMin(0);       //设置最小值
axisY->setMax(100);
axisX->setTitleText("时间");
axisY->setLinePenColor(QColor(Qt::darkBlue));       //设置坐标轴颜色
axisY->setGridLineColor(QColor(Qt::darkBlue));
//axisY->setGridLineColor(QColor(Qt::darkBlue));
axisY->setGridLineVisible(false);        //设置Y轴网格不显示
axisY->setLinePen(peny);
axisX->setLinePen(peny);chart->addAxis(axisX , Qt::AlignBottom);
chart->addAxis(axisY , Qt::AlignLeft);series->attachAxis(axisX);
series->attachAxis(axisY);axisY->setTitleText("y1");ui->widget->setChart(chart);
ui->widget->setRenderHint(QPainter::Antialiasing);
3、UI设计

UI这边比较简单 , 就是几个pushbutton ,QComboBox , widget等

4、定时器的配置
    timer = new QTimer(this);connect(timer , SIGNAL(timeout()) , this , SLOT(DrawLine()));
5、开始画图
QDateTime currentTime = QDateTime::currentDateTime();
//设置坐标轴的线式范围
chart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-60*1));
chart->axisX()->setMax(QDateTime::currentDateTime().addMSecs(0));qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//增加新的点到曲线末尾
series->append(currentTime.toMSecsSinceEpoch() , number);
6、效果展示

三、获取代码

链接: Qt 动态实时显示波形图.

Qt 动态实时显示波形图相关推荐

  1. windows卸载qt_如何在Qt中显示一个窗口并在关闭后立即将其删除?

    作为一个非常简单的例子,我想在按下按钮时在Qt中显示一个对话框.通常的模式(在我正在申请的应用程序中)似乎如下: class MainWindow { ... private slots: butto ...

  2. qt无法显示图片的原因

    qt无法显示图片: 原因: 1.检查图片路径,将图片路径改为全路径 如图片路径单为./jpg时,找不到图片,为全路径时可以找到 2.检查图片格式,不要乱改图片的后缀(如1.jpg改成1.png),否则 ...

  3. qt客户端显示服务器发送的图片,qt客户端显示服务器发送的图片

    qt客户端显示服务器发送的图片 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  4. Qt开发 — 显示gif动画

    Qt开发 - 显示gif动画 Qt 中,静态图片 PNG,JPG 等可以用其创建 QPixmap,调用 QLabel::setPixmap() 来显示,但是能够具有动画的 GIF 却不能这么做,要在 ...

  5. Kinect+OpenNI学习笔记之6(获取人体骨架并在Qt中显示)

    前言 MS的kinec SDK和OpenNI都提供了人体骨骼跟踪的算法,人体骨骼跟踪算法在kinect人体行为识别中非常重要,该识别过程通常被用来作为行为识别的第一步, 比如说,通过定位人体中的骨骼支 ...

  6. VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放、移动图片

    VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放.移动图片 效果展示 界面设计 代码例程 完整代码 CMyLabel.h CMyLabel.cpp BrowsePic.h BrowsePi ...

  7. 嵌入式QT中文显示的问题

    最近在做嵌入式QT项目发现中文没法显示,于是百度QT嵌入式显示中文,基本上都是讲TTF字库转成QPF,费时费力.经多次试验,找出其方法: 1.下载相关TTF字库,例如字库:DroidSansFallb ...

  8. QT+高德地图Web服务API开发—静态地图开发Demo。QT组件提升、QT鼠标事件处理、Qt图片显示与移动、QT网络操作

    说明 在本次项目中,我们使用QT开发框架,高德地图Web服务地图API,完成一个项目Demo,进行一次对QT.对编程的学习. 本系类文章所包含内容包括: 1.QT组件提升 2.QT鼠标事件处理 3.Q ...

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

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

最新文章

  1. java发送get请求_如何快速掌握Java技术 Tomcat知识点有哪些
  2. 六、爬虫中重要的解析库xpath和BeautifulSoup
  3. springboot出现Requested bean is currently in creation: Is there an unresolvable circular reference?
  4. 斐波那契数列与阶乘---递归实现
  5. 51单片机——DS18B20
  6. 漫画 | 让设计师崩溃的十个瞬间
  7. python制作桌面小程序_微信小程序在线制作:快速生成一个餐饮小程序
  8. PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
  9. 杭电1716排列2 stl
  10. 两个链表是否相交 + 赛马(分桶)
  11. requests 上传本地文件到服务器
  12. 使用jmeter测试接口
  13. 對比加班時間和考勤時間,得出實際加班時長函数
  14. 服务器驱动用什么工具_服务器是做什么用的,具体有什么作用,为什么机房要用服务器?...
  15. ADB的使用-简单命令
  16. 论文翻译:(BMVC 2022)You Only Need 90K Parameters to Adapt Light:a Light Weight Transformer
  17. 逆概率加权法(Inverse Probability Weighting, IPW)的原理及R实现
  18. Python调用百度根据经纬度查询地址
  19. JS原生实现照片抽奖
  20. Python - 面向对象编程 - 实战(4)

热门文章

  1. 高级转录组调控分析和R语言数据可视化第十三期 (线上/线下同时开课)
  2. 系统集成项目管理工程师2021年下半年下午案例分析题及答案
  3. 测试人员如何管理项目与风险预警
  4. 优化方法之黄金分割法(Python实现)
  5. 阿里巴巴高德地图春季2023届校园招聘正式启动!
  6. 在腾讯实习一年,我学到了什么
  7. fastdb c++接口
  8. 韩版机泛泰A850去除漫游时拨号选择框
  9. BUCT数据结构——图(拓扑排序、关键路径)
  10. Excel中杂乱的图片,一键就可以让它们对齐行