简体中文简体中文
EnglishEnglish
简体中文简体中文

Qt串口通信模块源码解析与应用 文章

2025-01-19 07:46:09

随着物联网技术的快速发展,嵌入式系统在各个领域的应用越来越广泛。Qt作为一款跨平台的C++图形用户界面库,因其出色的跨平台性能和易用性,被广泛应用于嵌入式开发中。在嵌入式系统中,串口通信是数据交换的重要方式之一。本文将针对Qt串口通信模块的源码进行解析,并探讨其在实际应用中的使用方法。

一、Qt串口通信模块简介

Qt串口通信模块(QSerialPort)是Qt框架中用于处理串口通信的类,它提供了对串口的基本操作,如打开、关闭、读取、写入等。通过使用QSerialPort类,开发者可以轻松实现串口数据的发送和接收。

二、Qt串口通信模块源码解析

1.QSerialPort类结构

QSerialPort类继承自QObject类,其结构如下:

` public: QSerialPort(); ~QSerialPort();

// 状态枚举
enum QSerialPort::PortName { ... };
enum QSerialPort::BaudRate { ... };
enum QSerialPort::DataBits { ... };
enum QSerialPort::Parity { ... };
enum QSerialPort::StopBits { ... };
enum QSerialPort::FlowControl { ... };
// 串口操作
bool open(QSerialPort::PortName portName, QSerialPort::BaudRate baudRate,
          QSerialPort::DataBits dataBits, QSerialPort::Parity parity,
          QSerialPort::StopBits stopBits, QSerialPort::FlowControl flowControl);
bool close();
bool isOpen() const;
QSerialPort::Error error() const;
// 读取操作
qint64 readData(char *data, qint64 maxSize);
qint64 readLine(char *line, qint64 maxSize);
qint64 readAll(char *data, qint64 maxSize);
// 写入操作
qint64 writeData(const QByteArray &data);
qint64 writeLine(const QByteArray &line);
qint64 writeAll(const QByteArray &data);
// 其他操作
void setPortName(QSerialPort::PortName portName);
void setBaudRate(QSerialPort::BaudRate baudRate);
void setDataBits(QSerialPort::DataBits dataBits);
void setParity(QSerialPort::Parity parity);
void setStopBits(QSerialPort::StopBits stopBits);
void setFlowControl(QSerialPort::FlowControl flowControl);
void setReadBufferSize(qint64 size);
void setWriteBufferSize(qint64 size);
QSerialPort::PortName portName() const;
QSerialPort::BaudRate baudRate() const;
QSerialPort::DataBits dataBits() const;
QSerialPort::Parity parity() const;
QSerialPort::StopBits stopBits() const;
QSerialPort::FlowControl flowControl() const;
qint64 readBufferSize() const;
qint64 writeBufferSize() const;
void reset();
QSerialPort::Error errorString() const;
void clearError();
void clear();
void waitForReadyRead(int msecs);
void waitForBytesWritten(int msecs);
QSerialPort::PortName portNames() const;
QSerialPort::PortName currentPortName() const;
void setCurrentPortName(QSerialPort::PortName portName);
void setLocalEchoEnabled(bool enabled);
bool localEchoEnabled() const;
void setReadTimeout(int msecs);
int readTimeout() const;
void setWriteTimeout(int msecs);
int writeTimeout() const;
void setPortInfo(QSerialPortInfo portInfo);
QSerialPortInfo portInfo() const;
void setPortSettings(QSerialPort::BaudRate baudRate, QSerialPort::DataBits dataBits,
                     QSerialPort::Parity parity, QSerialPort::StopBits stopBits,
                     QSerialPort::FlowControl flowControl);
QSerialPort::PortSettings portSettings() const;
void setFlowControlEnabled(bool enabled);
bool flowControlEnabled() const;
void setPortNameFilter(const QStringList &portNameFilter);
QStringList portNameFilter() const;
void setPortInfoFilter(const QStringList &portInfoFilter);
QStringList portInfoFilter() const;
void setPortInfoList(const QList<QSerialPortInfo> &portInfoList);
QList<QSerialPortInfo> portInfoList() const;
QSerialPort::PortName nextPortName() const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10,
                                   QSerialPort::PortName &nextPortName11) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10,
                                   QSerialPort::PortName &nextPortName11,
                                   QSerialPort::PortName &nextPortName12) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10,
                                   QSerialPort::PortName &nextPortName11,
                                   QSerialPort::PortName &nextPortName12,
                                   QSerialPort::PortName &nextPortName13) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10,
                                   QSerialPort::PortName &nextPortName11,
                                   QSerialPort::PortName &nextPortName12,
                                   QSerialPort::PortName &nextPortName13,
                                   QSerialPort::PortName &nextPortName14) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10,
                                   QSerialPort::PortName &nextPortName11,
                                   QSerialPort::PortName &nextPortName12,
                                   QSerialPort::PortName &nextPortName13,
                                   QSerialPort::PortName &nextPortName14,
                                   QSerialPort::PortName &nextPortName15) const;
QSerialPort::PortName nextPortName(const QSerialPort::PortName &portName,
                                   const QSerialPort::PortName &defaultName,
                                   const QStringList &portNameFilter,
                                   const QStringList &portInfoFilter,
                                   const QList<QSerialPortInfo> &portInfoList,
                                   QSerialPort::PortName &nextPortName,
                                   bool *valid,
                                   QSerialPort::PortName &nextPortName2,
                                   QSerialPort::PortName &nextPortName3,
                                   QSerialPort::PortName &nextPortName4,
                                   QSerialPort::PortName &nextPortName5,
                                   QSerialPort::PortName &nextPortName6,
                                   QSerialPort::PortName &nextPortName7,
                                   QSerialPort::PortName &nextPortName8,
                                   QSerialPort::PortName &nextPortName9,
                                   QSerialPort::PortName &nextPortName10,
                                   QSerialPort::PortName &nextPortName11,
                                   QSerialPort::PortName &nextPortName12,
                                   QSerialPort::PortName &nextPortName13,
                                   QSerialPort::PortName &nextPortName14,
                                   QSerialPort::PortName