转载请注明出处。https://rhirufxmbcyj.gitlab.io
Qt下读写串口需要用到两个类,QSerialPort 和 QSerialPortInfo。QSerialPortInfo这个类是用来遍历串口,获取串口信息的。QSerialPort提供了串口的读写等操作。
我是在windows上用vs加qt插件搭建的开发环境,使用的cmake构建工程,先放上我的cmake代码。
1 | project(SerialDemo) |
如果用qt的IDE的话,pro文件应该加上QT += serialport。
Qt5基本使用方法
- 遍历串口
1 | void QtSerialModule::scan_ports() |
输出的信息是
1 | Name "COM3" |
我接入的是一个GPRS模块,然后串口转USB接入电脑的,所以串口的描述也是串口转换信息。
PC上的串口名,每次插入都有可能不一样,所以单凭COM1 COM2 COM3来判断打开哪个串口是不可取的,除非电脑只接入了一个串口。
所以,应该用manufacturer或Description来确定需要打开哪个串口,这个信息在硬件出厂以后就是固定下来的,不用担心插拔后串口名会变化的问题。
- 打开串口代码
1 | //类成员变量 |
readyRead信号会在串口有数据时就出发,不会等串口数据传完才触发。所以,每次在槽函数on_serial_read()中从串口缓冲区读到的数据有可能不是完整的,而是被分成几段分次接收到,所以就需要在槽函数中自己完成拼接判断的操作。
- 读取串口数据函数
函数内部实现对应的拼接判断功能
1 | void QtSerialDemo::on_serial_read() |
Qt4基本使用方法
在交叉编译环境中(ubuntu 16.04),安装的qt版本是qt4.8的,而串口读写操作 qtserialport并没有集成到qt4中,所以想要使用就需要自己编译。
- 去Qt官方网站下载qtserialport-opensource-src-5.4.0。(Qt串口模块5.5开始不再支持Qt4,所以就下载最新版的5.4的串口模块吧)
- 解压后用qtcreator打开.pro文件
- 在qtcreator的构建步骤中加入一项Make步骤,参数为install
- 执行构建操作
编译好了以后就可以在自己的工程中使用串口模块了,和qt5的用法一样。
ps:我的是在ubuntu中编译的,因为在核心板中qt5底层库有些不支持,所以就只能用qt4了,如果没有这个限制,还是用最新版的qt吧。