QT5串口上位机——从零开始教你写02
简单串口编写
2.QSerialPort模块配置
QT的QtSerialPort模块
Qt中提供了两个C++类,分别是QSerialPort 和QSerialPortInfo。
它们功能如下:
QSerialPort :提供了操作串口的各种接口。
QSerialPortInfo :可以提供计算机中可用串口的各种信息。
QtSerialPort模块使用方法
首先,需要在pro文件中增加如下内容:
QT += serialport
然后执行qmake,如果未执行 后面添加头文件时会报错。
给项目添加新的**C++**类,

选择C++ Class
取名Serial,点击下一步即可生成对应的文件
在生成的serial.h中进行如下操作
#ifndef SERIAL_H
#define SERIAL_H
#include <QObject>
#include <QSerialPort> //添加串口类的头文件
#include <QSerialPortInfo> //添加串口信息的头文件
class Serial : public QObject
{
Q_OBJECT
public:
explicit Serial(QObject *parent = nullptr);
~Serial(void); //添加析构函数
void SerialOpen(); //添加打开串口函数
void SerialClose(); //添加关闭串口函数
private:
QSerialPort* MySerial; //添加串口类成员
signals:
void SetInfo(QString info);
void isnoSerialOpen();
};
#endif // SERIAL_H
分别将光标置于函数后面 按下快捷键 alt + enter
~Serial(void); //添加析构函数
void SerialOpen(); //添加打开串口函数
void SerialClose(); //添加关闭串口函数
出现以下图片时 回车 即可在 cpp 文件中定义函数。
动图展示。
~Serial(void); 用来delete 之后程序中 new出来的变量
void SerialOpen();和 void SerialClose();则是用来进行打开串口的操作。
首先在 cpp 文件中 对MySerial进行实例化。
然后,鼠标放在MySerial上按下快捷键F1,打开QSerialPort的帮助文档。找到Public Functions
打开Detailed Description
从帮助文档中可以看出来,我们需要对串口进行的一些配置。
配置串口参数
操作步骤如下:
1.首先需要设置要打开的串口名,这里可以通过**setPortName()或者setPort()**进行配置
2.然后通过使用open()函数以 read-only (r/o), write-only (w/o), or read-write (r/w) 模式之一打开串口
3.然后,检测串口是否被打开 (且没有其他的进程或者线程打开串口,如果有就关闭串口在重新打开)
4.最后,配置串口参数如配置串口名,波特率,数据位,校验位,停止位和流控位
配置函数如下:
void setPortName(const QString &name)
bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions = AllDirections)
bool setDataBits(QSerialPort::DataBits dataBits)
bool setParity(QSerialPort::Parity parity)
bool setStopBits(QSerialPort::StopBits stopBits)
bool setFlowControl(QSerialPort::FlowControl flowControl)
首先,我们需要QString和qint32这两个类型的name参数和baudRate参数,这是通过ui界面的Qcombobox选项得到的。因为使用多线程的原因,不能直接调用,所以,这里通过构建结构体,通过传递结构体来传递参数。
鼠标右键点击工程,添加一个新的cpp头文件
设置头文件名称为 SerialInfo.h ,点击下一步,完成。
添加 SerialInfo.h的内容如下。
#ifndef SERIALINFO_H
#define SERIALINFO_H
#include <QVector>
#include <QMetaType>
typedef struct SerialInfos //串口配置信息
{
QString comName; //串口名称
qint32 baudRate; //波特率
qint32 dataBits; //数据位
qint32 parity; //校验位
qint32 stopBits; //停止位
qint32 flowControl; //流控位
qint32 Encode; //编码格式
}Sinfo;
//通过Q_DECLARE_METATYPE声明后,就可以让自定义的类型设置到QVariant。
Q_DECLARE_METATYPE(Sinfo);
#endif // SERIALINFO_H
在serial.h中添加头文件
#include "SerialInfo.h"
并添加私有成员
private:
QSerialPort* MySerial;
Sinfo *info=nullptr; //串口配置
QString InfoSet; //存储串口配置
修改后的serial.h内容如下
#ifndef SERIAL_H
#define SERIAL_H
#include <QObject>
#include <QSerialPort> //添加串口类的头文件
#include <QSerialPortInfo> //添加串口信息的头文件
#include "SerialInfo.h"
class Serial : public QObject
{
Q_OBJECT
public