大家好,我是KookNut39,在CSDN写文,分享一些自己认为在学习过程中比较重要的东西,致力于帮助初学者入门,希望可以帮助你进步。最近在更新C/C++方面的知识,感兴趣的欢迎关注博主,可以去专栏查看之前的文章,希望未来能和大家共同探讨技术。

由于某项目需要,需要写一个处理串口数据的程序,之前也没有用过Qt,所以这次打算用Qt实现这个功能。

有一说一,Qt相比于MFC真的是方便快捷了很多,在开发界面的方面还是很强大的。
话不多说,先上咱们最终实现的效果图。界面简单,如果大家在某些地方需要通过串口获取数据之后做处理的话,可以考虑使用。
通过点击按钮从串口读取数据并展现到文本框中。

功能是能够实现获取串口数据最简单的一些基础功能,肯定是不能和网上下载的很多成熟的软件比较,就比如微软自带的串口调试助手,如下图:
除了能够实现读取数据的同时,还能够设置额外输出方式等等算是额外辅助的功能吧。

实现的步骤按照如下几个步骤展开讲解:
对于串口的读取,Qt中自带了两个类供我们使用,分别是QtSerialPort、QserialPortInfo,基础对串口的操作这两个类都是提供了的。兄弟们如果在这个基础上加功能可以查询一下这两个类,根据这两个类里面自带的函数扩充你想要的功能。

1、首先就是在.pro文件中加上serialport,熟悉Qt的小伙伴一定都知道在Qt中使用什么额外的功能呀什么的,就要在这个部分写上这句话。

QT       += core gui serialport

2、对界面上的一些空间初始化
对于界面中控件的一些命名什么的,大家可以看下面的代码,通过变量名大家可以很容易得到控件的命名信息。这里就不详细给兄弟们展示了。

 //设置串口初始化状态ReadSerialPort = NULL;//设置界面初始的状态ui->ReadBtn->setEnabled(true);ui->StopReadBtn->setEnabled(false);//初始化串口设置部分ui->ChooseComComboBox->clear();ui->ChooseBoudComboBox->clear();ui->ChooseDataBitsComboBox->clear();ui->ChooseParityComboBox->clear();ui->ChooseStopComboBox->clear();QStringList ChooseComList;QStringList ChooseBoudList;QStringList ChooseDataBitsList;QStringList ChooseParityList;QStringList ChooseStopList;//获取电脑连接的串口信息供选择foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){ChooseComList << info.portName();}ui->ChooseComComboBox->addItems(ChooseComList);ui->ChooseComComboBox->setCurrentIndex(0);//波特率的选择ChooseBoudList <<"1200" <<"2400" <<"4800" <<"9600" <<"19200" <<"38400" <<"57600" <<"115200";ui->ChooseBoudComboBox->addItems(ChooseBoudList);ui->ChooseBoudComboBox->setCurrentIndex(0);//数据位的选择ChooseDataBitsList <<"5" <<"6"<<"7"<<"8"<<"UnknownDataBits";ui->ChooseDataBitsComboBox->addItems(ChooseDataBitsList);ui->ChooseDataBitsComboBox->setCurrentIndex(0);//校验位的选择ChooseParityList <<"NoParity" <<"EvenParity" <<"OddParity" <<"UnknownParity";ui->ChooseParityComboBox->addItems(ChooseParityList);ui->ChooseParityComboBox->setCurrentIndex(0);//停止位的选择ChooseStopList  <<"1" <<"2" <<"无";ui->ChooseStopComboBox->addItems(ChooseStopList);ui->ChooseStopComboBox->setCurrentIndex(0);

3、连接串口功能的实现。这也是最核心的部分:

 //点击按钮之后把状态改变了ui->ReadBtn->setEnabled(false);ui->StopReadBtn->setEnabled(true);//每次点击按钮之后创建一个对象,这也是解决了之前读取空值的问题ReadSerialPort = new QSerialPort();if(ReadSerialPort->isOpen())//如果串口已经打开了 先给他关闭了{ReadSerialPort->clear();ReadSerialPort->close();}//根据下拉框选取串口QString ChoosedPortName=ui->ChooseComComboBox->currentText();ReadSerialPort->setPortName(ChoosedPortName);//当前选择的串口名字if(ReadSerialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式尝试打开串口{ReadSerialPort->setDataTerminalReady(true);//根据下拉框选择波特率qint32 BaudrateIndex = ui->ChooseBoudComboBox->currentIndex();switch (BaudrateIndex) {case 0:ReadSerialPort->setBaudRate(QSerialPort::Baud1200);break;case 1:ReadSerialPort->setBaudRate(QSerialPort::Baud2400);break;case 2:ReadSerialPort->setBaudRate(QSerialPort::Baud4800);break;case 3:ReadSerialPort->setBaudRate(QSerialPort::Baud9600);break;case 4:ReadSerialPort->setBaudRate(QSerialPort::Baud19200);break;case 5:ReadSerialPort->setBaudRate(QSerialPort::Baud38400);break;case 6:ReadSerialPort->setBaudRate(QSerialPort::Baud57600);break;case 7:ReadSerialPort->setBaudRate(QSerialPort::Baud115200);break;default:ReadSerialPort->setBaudRate(QSerialPort::UnknownBaud);break;}//根据下拉框选择数据位qint32 DatabitsIndex=ui->ChooseDataBitsComboBox->currentIndex();switch (DatabitsIndex) {case 0:ReadSerialPort->setDataBits(QSerialPort::Data5);break;case 1:ReadSerialPort->setDataBits(QSerialPort::Data6);break;case 2:ReadSerialPort->setDataBits(QSerialPort::Data7);break;case 3:ReadSerialPort->setDataBits(QSerialPort::Data8);break;default:ReadSerialPort->setDataBits(QSerialPort::UnknownDataBits);break;}//根据下拉框选择校验位qint32 ParityIndex=ui->ChooseParityComboBox->currentIndex();switch (ParityIndex) {case 0:ReadSerialPort->setParity(QSerialPort::NoParity);break;case 1:ReadSerialPort->setParity(QSerialPort::EvenParity);break;case 2:ReadSerialPort->setParity(QSerialPort::OddParity);break;default:ReadSerialPort->setParity(QSerialPort::UnknownParity);break;}//根据下拉框选择停止位qint32 StopbitIndex=ui->ChooseStopComboBox->currentIndex();switch (StopbitIndex) {case 0:ReadSerialPort->setStopBits(QSerialPort::OneStop);break;case 1:ReadSerialPort->setStopBits(QSerialPort::TwoStop);break;default:ReadSerialPort->setStopBits(QSerialPort::UnknownStopBits);break;}//实例 误删//ReadSerialPort->setBaudRate(QSerialPort::Baud115200);//设置波特率和读写方向//ReadSerialPort->setDataBits(QSerialPort::Data8);      //数据位为8位//ReadSerialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控制//ReadSerialPort->setParity(QSerialPort::NoParity);    //奇校验位//ReadSerialPort->setStopBits(QSerialPort::OneStop); //两位停止位ReadSerialPort->clearError();ReadSerialPort->clear();connect(ReadSerialPort,&QSerialPort::readyRead,this,&Read::receiveInfo);

这里说一下之前自己遇到的一个问题吧,原本我的QT版本是5.13.0,当时代码已经调整过了,但是无论怎样都无法获取到串口传过来的值,这个bug改了整整一天,后来发现是QT这个版本的问题,后来把这个版本卸载然后装上了5.14.2,问题直接解决。
当然这里要提一下还有另外一个方式可以解决这个问题,就是通过添加waitForReadyRead(30000);这个方式倒是也解决了读取的问题,但是后面遇到了其他的的问题,可能是因为我当时想着使用线程的原因,导致的程序崩溃的问题,但是具体是不是因为这句话我就不知道了,但是换了版本之前的问题迎刃而解。我这里还是建议大家直接安装一个没有问题的版本吧,后面会省去很多的事情。

4、输出数据实现

void Read::receiveInfo()
{//读取串口的数据并且把数据转换成字符串类型QByteArray info = ReadSerialPort->readAll();qDebug() << info;ui->GpsOutputTextEdit->append(info);
}

基于QT的串口调试助手相关推荐

  1. java串口调试助手_基于 QML的 串口调试助手

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_38416696/arti ...

  2. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  3. 如何用QT做串口调试助手Qseriaport类的使用

    首先新建工程界面设计 在这里我就不做详述了,注意的一点就是接收框是QPlainTextEdit,我把我的整体放上来,有点丑,你们可以自由发挥. 在写之前我先把我创建的一些全局变量什么的写出来,免得下面 ...

  4. 使用Qt打造属于自己的串口调试助手

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家. 点击跳转到教程,人工智能编程入门博客 一个专注于嵌入式知识分享,学习路上不迷路的公众号,欢迎关注. 想加技术交流群的 ...

  5. QT5 串口调试助手

    参考: https://blog.csdn.net/qq_41068712/article/details/89320918 https://blog.csdn.net/rsd102/article/ ...

  6. 一款基于Qt的跨平台开源串口调试助手EasySerial

    文章目录 1. 简述 2. 开发步骤 2.1 界面布置 2.2 串口搜索与打开 2.3 ASCII/HEX接收 2.4 接收数据保存 2.5 ASCII/HEX发送 2.6 周期发送 2.7 读取文件 ...

  7. Qt实践录:串口调试助手

    由于项目需要使用到串口调试及测试,为了练手,使用 Qt 编写一个串口调试助手.本文按开发的过程进行简单介绍,同时也涉及部分用到的模块代码.详细代码参考源码仓库. 工具特性 具体功能 具备串口收发功能. ...

  8. 【Qt串口调试助手】1.1 - Qt5编写串口调试助手,Qt串口编程

    这章来学习串口数据流操作.仿照已有成品制作一个用Qt开发的串口调试助手. 介于篇幅有限,本篇只介绍一个最简单的能收发的串口调试助手的制作.后续篇幅会陆续对剩余代码进行讲解,并添加各种功能,对显示.操作 ...

  9. 学习笔记:使用Qt制作一个串口调试助手

    界面设计参考了野火串口调试助手C#版 功能基本实现!实现效果看图: 第一步:制作图形界面 注意控件命名要又辨识度,不然在编写代码时将是很很痛苦的 第二步:添加相应的库 添加此次工程所需要的串口库,在工 ...

最新文章

  1. UML类图、接口、包、关系
  2. javascript document对象 第21节
  3. pip 和 conda 源更改
  4. 算法训练 猴子分苹果c语言,算法训练 猴子分苹果
  5. 微信小程序使用adb工具
  6. Verilog中wire与reg类型的区别(转载自http://www.cnblogs.com/farbeyond/p/5204586.html)
  7. Android 数据库框架 DBFlow 的使用
  8. linux ubuntu软件中心,安装Lubuntu 软件中心
  9. 前端学习入门,如何系统的学习前端?
  10. OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
  11. 编写 Struts2 程序 的三个步骤 手动配置
  12. 杭电 1021 找规律
  13. 烟道机器人_力荐顺义区清洗烟道价格多少钱值得信赖
  14. 卡巴斯基2010(9.0)key激活商用授权文件安装方法
  15. 前端素材库网站集合——网站集合
  16. 免费开源网站系统有哪些
  17. 水星路由器DNS服务器未响应,为什么新版水星路由器不能上网
  18. 不可思议!信用报告也能出错?
  19. P6207 [USACO06OCT] Cows on Skates G
  20. requests模块练习1

热门文章

  1. idea通过svn上传_IDEA提交整个项目到svn
  2. 给定一个层数n,输出字母三角形
  3. 8月TIOBE编程语言排行榜出炉:它稳了!
  4. MATLAB中fix啥意思,matlab fix函数用法_常见问题解析,matlab
  5. 微信web开发者工具无法打开网络连接失败,网上的办法都无法解决的小伙伴可以用我这个办法
  6. Vue教程03-Vue脚手架开发环境
  7. 华三服务器hdm时间怎么修改,华三服务器HDM命令设置
  8. 学计算机笔画,笔画宝宝(适合3-8岁儿童识字和学写字)
  9. Redis几种集群模式
  10. 【工业设计】设计应注意技术、情感需求和技术发展