Qt 串口类QSerialPort 使用笔记

虽然现在大多数的家用PC机上已经不提供RS232接口了。但是由于RS232串口操作简单、通讯可靠,在工业领域中仍然有大量的应用。Qt以前的版本中,没有提供官方的对RS232串口的支持,编写串口程序很不方便。现在好了,在 Qt5.1 中提供了QtSerialPort模块,方便编程人员快速的开发应用串口的应用程序。 本文就简单的讲讲QtSerialPort模块的使用。

当前的QtSerialPort模块中提供了两个C++类,分别是QSerialPort 和QSerialPortInfo。

QSerialPort 类提供了操作串口的各种接口。

QSerialPortInfo 是一个辅助类,可以提供计算机中可用串口的各种信息。

使用方法

先介绍 QSerialPortInfo 的使用。下面是一个简单的例子,用来列举出电脑上全部的串口设备。

首先,需要在pro文件中增加如下内容:

QT += serialport

Cpp 文件如下:

[cpp] view plaincopy
  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <QSerialPort>
  4. #include <QSerialPortInfo>
  5. int main(int argc, char *argv[])
  6. {
  7. QCoreApplication a(argc, argv);
  8. foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
  9. {
  10. qDebug() << "Name : " << info.portName();
  11. qDebug() << "Description : " << info.description();
  12. qDebug() << "Manufacturer: " << info.manufacturer();
  13. qDebug() << "Serial Number: " << info.serialNumber();
  14. qDebug() << "System Location: " << info.systemLocation();
  15. }
  16. return a.exec();
  17. }

在我的电脑上显示的结果如下:

[plain] view plaincopy
  1. Name :  "COM1"
  2. Description :  "通信端口"
  3. Manufacturer:  "(标准端口类型)"
  4. Serial Number:  ""
  5. System Location:  "\\.\COM1"
  6. Name :  "COM5"
  7. Description :  "USB Serial Port"
  8. Manufacturer:  "FTDI"
  9. Serial Number:  "A400G3UXA"
  10. System Location:  "\\.\COM5"

通常,我们需要指定程序使用某一个确定的串口,这时不能只使用串口名称,因为USB串口每次插在不同的USB口上时获得的串口名称都可能有变化。这时可以利用串口的序列号,这个号码一般来说是唯一的,比如下面的代码,首先遍历所有的串口,找到我们需要的串口后就返回。

[cpp] view plaincopy
  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <QSerialPort>
  4. #include <QSerialPortInfo>
  5. int main(int argc, char *argv[])
  6. {
  7. QCoreApplication a(argc, argv);
  8. QSerialPortInfo com_info;
  9. foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
  10. {
  11. if( info.serialNumber() == "A400G3UXA" )
  12. {
  13. com_info = info;
  14. break;
  15. }
  16. }
  17. qDebug() << "Name : " << com_info.portName();
  18. qDebug() << "Description : " << com_info.description();
  19. qDebug() << "serialNumber: " << com_info.serialNumber();
  20. return a.exec();
  21. }

QSerialPort 负责具体的串口操作。选定串口后,要先打开串口,才能设置波特率等参数。这些参数都设置好了就可以使用了。最基本的操作无非是read() 和 write()。需要注意的是这两个操作都是非阻塞的。

另外有一个重要的signal 也需要用到,那就是 void QIODevice::readyRead()

每次串口收到数据后都会发出这个signal。我们的程序中需要定义一个slot,并将其与这个signal 相连接。这样,每次新数据到来后,我们就可以在slot中读取数据了。这时一定要将串口缓冲区中的数据全部读出来,可以利用readAll() 来实现。

下面的代码片段给出了设置串口的例子。

[cpp] view plaincopy
  1. m_reader.setPort(info);
  2. if(m_reader.open(QIODevice::ReadWrite))
  3. {
  4. qDebug() << "m_reader.open(QIODevice::ReadWrite)";
  5. m_reader.setBaudRate(QSerialPort::Baud9600);
  6. m_reader.setParity(QSerialPort::NoParity);
  7. m_reader.setDataBits(QSerialPort::Data8);
  8. m_reader.setStopBits(QSerialPort::OneStop);
  9. m_reader.setFlowControl(QSerialPort::NoFlowControl);
  10. m_reader.clearError();
  11. m_reader.clear();
  12. connect(&m_reader, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
  13. }
  14. void Dialog::readyReadSlot()
  15. {
  16. qDebug() << "x";
  17. QByteArray arr = m_reader.readAll();
  18. do_something(arr);
  19. }

Qt 串口类QSerialPort 使用笔记相关推荐

  1. Qt 串口类QSerialPort 学习笔记

    一.串口类简介 当前的QtSerialPort模块中提供了两个C++类,分别是QSerialPort 和QSerialPortInfo. QSerialPort 类提供了操作串口的各种接口. QSer ...

  2. 【Qt5.8】Qt5.8中串口类QSerialPort

    00. 目录 00. 目录 01. 串口通信基础 02. QtSerialPort模块简介 03. QSerialPort简介 04. QSerialPort类成员函数 05. 参考示例(简单的串口示 ...

  3. android qt 串口通信,Qt串口通信开发之QSerialPort模块详细使用方法与实例

    Qt串口通信开发之QSerialPort模块详细使用方法与实例 发布时间:2020-10-23 12:19:05 来源:脚本之家 阅读:111 作者:沧海一笑-dj Qt串口通信基础及名词说明 串口通 ...

  4. QT串口QSerialPort解决接收数据不完整问题

    QT串口QSerialPort解决接收数据不完整问题 QSerialPort类例程:Examples\Qt-5.9.1\serialport\terminal,该例子完美展示了qt串口收发过程,直接在 ...

  5. Qt串口QSerialPort的多线程 及 QSerialPort的waitForReadyRead函数的问题

    文章目录 1.QSerialPort的多线程限制 1.1.尝试通过复制参数在子线程运行 1.1.1.操作原理 1.1.2.QSerialPort::write的异步特性 2.使用QSerialPort ...

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

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

  7. Qt使用第三方串口类qextserialport无法打开串口的可能解决方案(文章中描述的可以解决)

    我前面的博客提到了,在我的笔记本电脑中用QT的第三方串口类QextSerilPort打不开串口,今天终于解决了,下面简单分享一下: 先说下环境:我用的是QT4.8.0,每三方的串口类QextSeria ...

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

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

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

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

最新文章

  1. 快速指南:使用OpenCV预处理神经网络中的面部图像
  2. windows8.1与centos7.0双系统启动项设置
  3. python tornado入门_Tornado入门
  4. (理解和3种方法完全解决pycharm报错)main.py: error: the following arguments are required: -d/--dataset
  5. 浅析Codewarrior、IAR和Keil MDK三大开发环境优缺点
  6. 云原生存储系列文章(一):云原生应用的基石
  7. 【分享】【养生】消灭小肚腩
  8. index.html乱码问题,用apache打开文件index显示乱码为什么
  9. 触发full gc的条件
  10. 京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)
  11. iOS模拟器中修改textField键盘类型为中文输入和键盘弹出方法
  12. 网络电视录制软件_有哪些比较好用的录音软件【精品合集】
  13. 数仓 调度_【数仓开发-数仓概念篇】3.3 报表vs数据可视化vs ETL
  14. 简单读取带有EXCEL宏病毒文件的内容
  15. linux 系统如何启动服务,如何查看和停止Linux启动的服务
  16. windows下安装MinGW及C++的环境配置
  17. 问题adb remount提示Devices Locked
  18. LIN总线、CAN总线、FlexRay总线和MOST总线
  19. leetcode刷题报告 之hrt篇 oa leetcode 722 Remove Comments python
  20. 网络编程——CS模型(总结)

热门文章

  1. 《 Docker 技术入门与实战 》读书笔记 ( CentOS 安装 Docker )
  2. vue打包成app后,背景图片不显示
  3. 可持久化平衡树(FHQ Treap)
  4. 深入了解RabbitMQ工作原理及简单使用
  5. C3P0连接池工具类使用
  6. 如何高效的编写与同步博客 (.NET Core 小工具实现)
  7. 学生成绩管理系统-程序维护
  8. python-访问者模式
  9. 《netty实战》阅读笔记(2)——Netty 的数据容器ByteBuf
  10. 初学duboo+zookeeper