最近一直在学习如何使用 Qt5.10 编写一些小程序,学的很多很杂,难免有些容易遗忘的东西。今天就打算用写博客的形式做一下小小的回顾,把之前写过的一些东西整理分享一下,非常欢迎各路大佬们前来交流指正。

那么废话不多说了,今天要回顾的内容是关于Qt这个软件中调用系统串口设备进行通信的方法。

一、串口基本操作

1.环境配置

Qt5中有一个QSerialPort类,使用它我们就可以方便的进行串口通信。

要使用QSerialPort,首先要在pro文件中添加

QT       += serialport

这句话的作用是让Qt加载串口库函数

然后还要在使用串口的文件中添加头文件

#include <QtSerialPort/QSerialPort>  //QSerialPort:提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo>   //QSerialPortInfo:提供系统中存在的串口的信息

做好这些内容就可以开心的使用串口设备了。

2.串口设置

串口设备一般有这样几个很重要的设置,需要输入设备与输出设备完全对应:1.串口号 2.波特率 3.数据位 4.校验位 5.停止位

所以使用串口首先就要新建 QSerialPort串口对象 对这几项参数进行设置。

由于串口设备往往会在不同的函数中被调用,所以我们可以使用全局变量保存串口设备的指针,在初始化函数中创建串口设备的对象,并将全局的指针指向这个对象,以达到在不同函数中使用同一串口设备的作用。

以下是对于串口设备进行设置的一个举例:

    QSerialPort *serial = new QSerialPort;
    //设置串口名
    serial->setPortName(Portname);
    //打开串口
    serial->open(QIODevice::ReadWrite);
    //设置波特率
    serial->setBaudRate(BaudRate);
    //设置数据位数
    serial->setDataBits(QSerialPort::Data8);
     //设置奇偶校验
    serial->setParity(QSerialPort::NoParity);
    //设置停止位
    serial->setStopBits(QSerialPort::OneStop);
    //设置流控制
    serial->setFlowControl(QSerialPort::NoFlowControl);

在这里,我们新建了一个串口设备指针 serial ,并将这个指针指到新建的串口对象上。

设置串口的名字为Portname,这里Portname是一个QString型的变量 表示串口的名字,一般是“COM1”、“COM2”这样的名字,它必须是计算机设备上已经存在的串口设备名字,且没有被其他程序占用,才能被顺利的打开。

以可读可写方式打开串口,设置波特率BaudRate 为整数,常用的波特率有1200、2400、9600、115200、640000等。

设置数据位为8位,校验位为无校验,停止位为一位,不使用流控制。

3.串口读取

配置好串口设置后,我们就要准备串口读取函数和串口写入函数了。当串口设备接收到一组(注1)从串口传来的信息之后,会发送一个readyRead()信号,这时候我们只要设置槽函数Read_Data()与这个信号进行连接,使用readAll()函数就能够实现对串口设备的读取功能了。

void MainWindow::Read_Data()  
{  
     QByteArray buf;  
     buf = serial->readAll();  
}  
//连接串口读取函数
        QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);

设置好连接函数后,当串口数据传来的时候就能自动通过readyRead信号触发Read_Data函数,从而实现串口内容的读取了。

注1:这里我使用了措辞“一组”,而不是说接受信息完毕,是因为发送端发送过来的一串信息场常常被分为几段信息被串口接收设备接收,就比如发送的内容为“beautiful”而接收到的信息可能是“bea”、“uti”、“ful”触发了三次readyRead信号。这对串口数据的读取后的处理有着一定的影响。

4.串口写入

串口写入函数非常简单

serial->write(bytes);

write函数可以将数据以byte的形式发送出去,这里的bytes推荐使用QByteArray类型保存和处理。

这是我第一次写博客,感觉还是有些累人的,这些看似简单的东西却花了我很长时间去写,后面还有更多的内容想要写出来,真是佩服以前看过的那些博主,非常感谢他们分享那么多实用有趣的内容,接下来我也希望能够尽自己的绵薄之力,分享出自己的一些心得,和大家多多交流。

这次回顾,我想还是先列一个大纲比较好,以免到后面忘记想要写些什么东西。就先把后面想要回顾的主要内容列一下。

二、串口助手界面设计

1.ComboBox的使用

2.编辑样式表

3.Layouts布局器(组件自适应窗口大小)

三、可用串口设备的自动检测(定时器的使用以及黑名单策略)

四、自动保存上一次的串口设备配置(QSettings)

五、串口设备的中文编码问题

六、串口设备的hex格式读写功能

七、配置完成后能够自动隐藏的串口组件

八、文件读写,串口数据的保存

暂时能回忆起来的就这么多,感觉也不少了,不知道多久能够总结完,会不会半途而费。总之 尽力吧!

回顾Qt调用串口设备相关推荐

  1. Qt调用MATLAB

    Qt调用MATLAB 生成的dll经验分享 由于项目需要将生成的数据转成C3D运动捕捉格式,目前无C++转换算法,有MATLAB算法,考虑到C++重新码算法的时间,选择了将MATLAB算法直接转成C+ ...

  2. QT调用C#写的Dll

    QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数 ...

  3. Qt调用word 例子

    Qt调用word 例子 Getting Microsoft Word Object to SaveAs #include <QtGui> #include <QAxObject> ...

  4. linux python qt 安装目录,Linux 下QT调用Python库文件 以及Linux 安装Python3.8开发环境 问题...

    最近想运用linux系统下Qt来实现c++ 与python的混合编程,linux系统会自带python2.7版本或者python3.5版本(深度linux). Qt调用python文件需要在pro文件 ...

  5. QT调用C++写的Dll

    C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net运行时,最好的方 ...

  6. QT 调用 DLL 的三种方法

    Qt调用DLL方法一:使用Win32 API h文件 typedef bool (CALLBACK* SetKeyBoardHook)(HWND); HINSTANCE hDLL; // Handle ...

  7. Qt 调用MATLAB引擎混合编程

    0.前言 C/C++调用MATLAB有三个方式:调用dll文件.调用exe可执行程序和调用Engin引擎. 第一种方式利用MATLAB Coder 将MATLAB代码生成C/C++代码和相关动态链接库 ...

  8. Qt 调用Python引擎混合编程

    0.前言 使用Qt和Python做混合编程,充分发挥Qt GUI的图形化框架优势和Python数据处理的计算能力.复杂的计算可用到Python众多三方库,将Python需要执行的功能写成py文件,做成 ...

  9. qt调用mysql调用了存储过_Qt调用Server SQL中的存储过程

    Server SQL中的存储过程如下: CREATE procedure PINSERTPC @pcnum int, @pcname varchar(50), @pctype int, @ipaddr ...

最新文章

  1. Servlet----ServletContext
  2. PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
  3. DBus glib 各数据类型接收与发送详解—C语言(3)
  4. 关于Memcache使用的工具类
  5. Reno7系列全球首发IMX709超感光猫眼镜头:OPPO/索尼联合打造
  6. 定义一个Employee类,排序
  7. 烽火通信FSU数据采集设备通过中国铁塔测试
  8. 基于python数据可视化论文-基于Python的数据脱敏与可视化分析
  9. PayPal的钱如何提现?PayPal商家终于可以松口气了!
  10. html 实现b站弹幕,可实现B站 蒙版弹幕 效果的前端组件 —— Barrage UI
  11. 机器学习(一)模型三要素
  12. Matlab分析系统的动态性能
  13. EChart配置--基准线(坐标轴指示器axisPointer)的配置
  14. 如何用matlab对信号进行傅里叶变换
  15. Mock server是什么
  16. 企业级360°全方位用户画像:项目介绍[二]
  17. CCleaner解决的三个问题
  18. [源码解析] 深度学习流水线并行GPipe (2) ----- 梯度累积
  19. Linux的文件操作命令
  20. 网络协议-HTTPS(笔记)

热门文章

  1. 英语学习详细笔记(十四)附加问句
  2. HashMap1.8hash碰撞 和 扩容方法
  3. 不小心把文件删了怎么找回?解决你的烦恼
  4. 风险投资公司及风险投资基金及其联系方式
  5. 数字IC笔面常考,跨时钟域神器。——异步FIFO(简介及手撕代码)
  6. 使用DW编辑简单的图文混淆
  7. WINWORD.EXE遇到问题已经停止工作。
  8. 10分钟搭建树莓派NAS私有云和KODI影音播放系统 (3)---正式搭建
  9. 多线程优化(性能调优)
  10. seq2seq模型_彻底理解 Seq2Seq 模型