近期有个项目需要通过Qt进行串口通信,本文的目的是简单的记录Qt中串口相关类以及函数的使用方法。
Qt中已经封装好了串口的类:QSerialPort、QSerialPortInfo。
QSerialPort类提供了操作串口的各种接口;
QSerialPortInfo类提供计算机内可用串口的各种信息,起辅助作用。
在Qt中调用串口相关类时,需要在pro文件中加入:
QT += serialport
并引入相关头文件:
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
/***********************/
//定义之后需要用的变量
private:
Ui::MainWindow *ui;
QSerialPort *my_serialport;//实例化一个指向串口的指针,用于访问串口
QByteArray requestData;//用于储存从串口读取的数据,并且进行进制转换。4种方式:[]、at()、data()[]、constData[],其中[]、data()[]为可读可写,at()、constData()[]为可读。
接下是程序的界面设计,我们需要的控件有:
串口号comboBox_PortName;
波特率comboBox_BaudRate;
打开串口pushButton_Open;
关闭串口pushButton_Close;
发送pushButton_Send;
清空pushButton_Clear;
数据缓冲区textEdit_Buffer;
数据输入区textEdit_Write。
在构造函数中对当前窗口的控件进行一些简单的设置,比如设置窗口名称、数据缓冲区设置为只读状态、串口未打开时其他按钮一定是处于不可点击的状态:
this->setWindowTitle(("简易串口助手 "));
ui->pushButton_Close->setEnabled(false);
ui->pushButton_Send->setEnabled(false);
ui->pushButton_Clear->setEnabled(false);
ui->textEdit_Buffer->setReadOnly(true);
然后通过QSerialPortInfo类读取计算机内可用的串口信息,并且将可用的串口放入“串口号comboBox_PortName”内显示,供使用时选择:
foreach( const QSerialPortInfo &Info,QSerialPortInfo::availablePorts())//读取串口信息
{
//打印扫描到的串口信息
qD