最近一直在学习如何使用 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格式读写功能
七、配置完成后能够自动隐藏的串口组件
八、文件读写,串口数据的保存
暂时能回忆起来的就这么多,感觉也不少了,不知道多久能够总结完,会不会半途而费。总之 尽力吧!