一、界面设计
在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。
这里使用的软件是:“Axure RP”
二、新建工程与绘制界面
- 创建工程
使用Qt Creater 新建一个“Qt Widgets Application”。填好工程名字后,然后点击下一步,直到类信息页面选择Base class为:“QDialog”并修改类名字为“SerialDialog”,然后一直下一步,直到进入代码编辑页面就完成了工程创建。类信息页面如下图所示:
工程创建完如下所示:
- 绘制界面
双击工程文件中的“serialdialog.ui”文件,在弹出的界面绘制页面绘制章节一种所设计的界面,结果如下图所示:(注意红色修改部分)
三、用到的库函数说明
在工程文件中加下面代码来导入串口开发库:
QT += serialport
开发串口主要用到的qt串口类为:
-
QSerialPortInfo :用于描述串口设备详情的类,其有静态函数“availablePorts()”可以枚举可用的串口设备
官方文档:https://doc.qt.io/qt-5/qserialportinfo.html -
QSerialPort :用于打开串口,设置串口参数,以及发送和接收数据
官方文档:https://doc.qt.io/qt-5/qserialport.html#atEnd
setPort(const QSerialPortInfo &serialPortInfo)//设置端口
setBaudRate(qint32 baudRate)//设置波特率
setDataBits(QSerialPort::DataBits dataBits)//设置数据位
setParity(QSerialPort::Parity parity)//设置校验位
setStopBits(QSerialPort::StopBits stopBits)//设置停止位
open(QIODevice::OpenMode mode) //打开串口
close() //关闭串口
//读串口数据:
qint64 read(char *data, qint64 maxlen);
QByteArray read(qint64 maxlen);
//写串口数据
qint64 write(const char *data, qint64 len);
qint64 write(const QByteArray &data)
Qt信号:QSerialPort::readyRead() //收到下位机发来的数据会触发此信号
四、核心编写逻辑代码
直接在工程中的“SerialDialog”类里面定义QSerialPort的对象并设置参数即可实现“串口通信功能”,但是为了避免把“处理串口的逻辑代码”和“SerialDialog这个UI代码”混合在一起。即做解除耦合处理。因此这里单独做一个类把有关串口逻辑处理功能做个封装。这里仅列出核心逻辑代码。完整源代码从第四段获取。
对串口功能函数的封装类:
class MySerialPort : public QObject
{
Q_OBJECT
public:
MySerialPort(