QSerialPort Class

提供访问串行端口的函数。更多

头文件: #include <QSerialPort>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialPort)
target_link_libraries(mytarget PRIVATE Qt6::SerialPort)
qmake: QT += serialport
继承: QIODevice

注意:该类中的所有函数都是可重入的

公共类型

enum BaudRate { Baud1200, Baud2400, Baud4800, Baud9600, Baud19200, …, Baud115200 }
enum DataBits { Data5, Data6, Data7, Data8 }
enum Direction { Input, Output, AllDirections }
flags Directions
enum FlowControl { NoFlowControl, HardwareControl, SoftwareControl }
enum Parity { NoParity, EvenParity, OddParity, SpaceParity, MarkParity }
enum PinoutSignal { NoSignal, DataTerminalReadySignal, DataCarrierDetectSignal, DataSetReadySignal, RingIndicatorSignal, …, SecondaryReceivedDataSignal }
flags PinoutSignals
enum SerialPortError { NoError, DeviceNotFoundError, PermissionError, OpenError, NotOpenError, …, UnknownError }
enum StopBits { OneStop, OneAndHalfStop, TwoStop }

属性

公共函数

QSerialPort(QObject *parent = nullptr)
QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr)
QSerialPort(const QString &name, QObject *parent = nullptr)
virtual ~QSerialPort()
qint32 baudRate(QSerialPort::Directions directions = AllDirections) const
QBindable<QSerialPort::DataBits> bindableDataBits()
QBindable<QSerialPort::SerialPortError> bindableError() const
QBindable<QSerialPort::FlowControl> bindableFlowControl()
QBindable<bool> bindableIsBreakEnabled()
QBindable<QSerialPort::Parity> bindableParity()
QBindable<QSerialPort::StopBits> bindableStopBits()
bool clear(QSerialPort::Directions directions = AllDirections)
void clearError()
QSerialPort::DataBits dataBits() const
QSerialPort::SerialPortError error() const
QSerialPort::FlowControl flowControl() const
bool flush()
QSerialPort::Handle handle() const
bool isBreakEnabled() const
bool isDataTerminalReady()
bool isRequestToSend()
QSerialPort::Parity parity() const
QSerialPort::PinoutSignals pinoutSignals()
QString portName() const
qint64 readBufferSize() const
bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions = AllDirections)
bool setBreakEnabled(bool set = true)
bool setDataBits(QSerialPort::DataBits dataBits)
bool setDataTerminalReady(bool set)
bool setFlowControl(QSerialPort::FlowControl flowControl)
bool setParity(QSerialPort::Parity parity)
void setPort(const QSerialPortInfo &serialPortInfo)
void setPortName(const QString &name)
void setReadBufferSize(qint64 size)
bool setRequestToSend(bool set)
void setSettingsRestoredOnClose(bool restore)
bool setStopBits(QSerialPort::StopBits stopBits)
bool settingsRestoredOnClose() const
QSerialPort::StopBits stopBits() const

重新实现的公共函数

virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual bool canReadLine() const override
virtual void close() override
virtual bool isSequential() const override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual bool waitForBytesWritten(int msecs = 30000) override
virtual bool waitForReadyRead(int msecs = 30000) override

信号

void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)
void breakEnabledChanged(bool set)
void dataBitsChanged(QSerialPort::DataBits dataBits)
void dataTerminalReadyChanged(bool set)
void errorOccurred(QSerialPort::SerialPortError error)
void flowControlChanged(QSerialPort::FlowControl flow)
void parityChanged(QSerialPort::Parity parity)
void requestToSendChanged(bool set)
(since 6.9) void settingsRestoredOnCloseChanged(bool restore)
void stopBitsChanged(QSerialPort::StopBits stopBits)

重新实现的受保护函数

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 readLineData(char *data, qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 maxSize) override

详细说明

您可以使用QSerialPortInfo 辅助类获取可用串行端口的信息,该类允许枚举系统中的所有串行端口。这对获取要使用的串行端口的正确名称非常有用。您可以将辅助类对象作为参数传递给setPort() 或setPortName() 方法,以分配所需的串行设备。

设置端口后,可以使用open() 方法以只读 (r/o)、只写 (w/o) 或读写 (r/w) 模式打开端口。

注意: 串行端口始终以独占访问方式打开(即任何其他进程或线程都不能访问已打开的串行端口)。

使用close() 方法关闭端口并取消 I/O 操作。

成功打开后,QSerialPort 会尝试确定端口的当前配置并进行初始化。您可以使用setBaudRate(),setDataBits(),setParity(),setStopBits() 和setFlowControl() 方法将端口重新配置为所需的设置。

有几个属性可用于引脚输出信号,即QSerialPort::dataTerminalReady QSerialPort::requestToSend 。还可以使用pinoutSignals() 方法查询当前的引脚分配信号集。

一旦知道端口可以读取或写入,就可以使用read() 或write() 方法。另外,也可以调用readLine() 和readAll() 方便方法。如果没有一次性读取所有数据,剩余的数据将留待以后读取,因为新传入的数据会追加到 QSerialPort 的内部读取缓冲区。您可以使用setReadBufferSize() 限制读取缓冲区的大小。

QSerialPort 提供了一组函数,用于暂停调用线程,直到发出特定信号。这些函数可用于实现阻塞串行端口:

请参阅以下示例:

qint64 numReadTotal = 0;
char buffer[50];

for (;;) {
    const qint64 numRead  = serial.read(buffer, 50);

    // Do whatever with the array

    numReadTotal += numRead;
    if (numRead == 0 && !serial.waitForReadyRead())
        break;
}

如果waitForReadyRead() 返回false ,则表示连接已关闭或发生错误。

如果在任何时候发生错误,QSerialPort 将发出errorOccurred() 信号。您还可以调用error() 查找最后发生的错误类型。

使用阻塞串行端口编程与使用非阻塞串行端口编程截然不同。阻塞串行端口不需要事件循环,因此代码通常比较简单。不过,在图形用户界面应用程序中,阻塞串行端口只能在非图形用户界面线程中使用,以避免冻结用户界面。

有关这些方法的更多详情,请参阅示例应用程序。

QSerialPort 类还可与QTextStreamQDataStream 的流操作符(operator<<() 和 operator>>() )一起使用。但有一个问题需要注意:在尝试使用 operator>>() 重载操作符读取数据之前,请确保有足够的数据可用。

另请参阅 QSerialPortInfo

成员类型文档

enum QSerialPort::BaudRate

该枚举描述了通信设备运行时使用的波特率。

注意: 本枚举只列出了最常用的标准波特率。

常数说明
QSerialPort::Baud120012001200 波特
QSerialPort::Baud240024002400 波特
QSerialPort::Baud480048004800 波特
QSerialPort::Baud960096009600 波特
QSerialPort::Baud192001920019200 波特
QSerialPort::Baud384003840038400 波特
QSerialPort::Baud576005760057600 波特
QSerialPort::Baud115200115200115200 波特。

另请参阅 QSerialPort::baudRate

enum QSerialPort::DataBits

该枚举描述了所用数据位的数量。

常数说明
QSerialPort::Data55每个字符的数据位数为 5,用于波特码。一般只适用于较老的设备,如电话打印机。
QSerialPort::Data66每个字符的数据位数为 6,很少使用。
QSerialPort::Data77每个字符的数据位数为 7,用于真正的 ASCII 码。一般只适用于较老的设备,如电话印刷机。
QSerialPort::Data88每个字符的数据位数为 8,用于大多数类型的数据,因为其大小与字节大小相匹配。在较新的应用中几乎普遍使用。

另请参阅 QSerialPort::dataBits

枚举 QSerialPort::Direction
flags QSerialPort::Directions

该枚举描述了数据传输的可能方向。

注意: 在某些操作系统(如类 POSIX)中,该枚举用于为每个方向分别设置设备的波特率。

常量说明
QSerialPort::Input1输入方向。
QSerialPort::Output2输出方向。
QSerialPort::AllDirectionsInput | Output同时输入两个方向。

Directions 类型是QFlags<Direction> 的类型定义。它存储方向值的 OR 组合。

enum QSerialPort::FlowControl

该枚举描述了所使用的流量控制。

常数说明
QSerialPort::NoFlowControl0无流量控制。
QSerialPort::HardwareControl1硬件流量控制(RTS/CTS)。
QSerialPort::SoftwareControl2软件流量控制(XON/XOFF)。

另请参阅 QSerialPort::flowControl

enum QSerialPort::Parity

该枚举描述了所使用的奇偶校验方案。

常数说明
QSerialPort::NoParity0不发送奇偶校验位。这是最常见的奇偶校验设置。错误检测由通信协议处理。
QSerialPort::EvenParity2每个字符(包括校验位)中的 1 位数总是偶数。
QSerialPort::OddParity3每个字符(包括奇偶校验位)中 1 位的数量总是奇数。确保每个字符中至少发生一次状态转换。
QSerialPort::SpaceParity4空间奇偶校验。奇偶校验位在空格信号条件下发送。它不提供错误检测信息。
QSerialPort::MarkParity5标记奇偶校验。奇偶校验位始终设置为标记信号条件(逻辑 1)。它不提供错误检测信息。

另请参阅 QSerialPort::parity

枚举 QSerialPort::PinoutSignal
标志 QSerialPort::PinoutSignals

该枚举描述了可能的 RS-232 引脚输出信号。

常量说明
QSerialPort::NoSignal0x00无激活线路
QSerialPort::DataTerminalReadySignal0x04DTR(数据终端就绪)。
QSerialPort::DataCarrierDetectSignal0x08DCD(数据载波检测)。
QSerialPort::DataSetReadySignal0x10DSR(数据就绪)。
QSerialPort::RingIndicatorSignal0x20RNG(振铃指示器)。
QSerialPort::RequestToSendSignal0x40RTS(请求发送)。
QSerialPort::ClearToSendSignal0x80CTS(清除发送)。
QSerialPort::SecondaryTransmittedDataSignal0x100STD(二次发送数据)。
QSerialPort::SecondaryReceivedDataSignal0x200SRD(二次接收数据)。

PinoutSignals 类型是QFlags<PinoutSignal> 的类型定义。它存储 PinoutSignal 值的 OR 组合。

另请参阅 pinoutSignals(),QSerialPort::dataTerminalReady, 和QSerialPort::requestToSend

enum QSerialPort::SerialPortError

该枚举描述了QSerialPort::error 属性可能包含的错误。

常量说明
QSerialPort::NoError0未发生错误。
QSerialPort::DeviceNotFoundError1尝试打开不存在的设备时发生错误。
QSerialPort::PermissionError2尝试打开已被其他进程打开的设备时发生错误,或用户没有足够的权限和凭证打开设备时发生错误。
QSerialPort::OpenError3尝试打开此对象中已打开的设备时发生错误。
QSerialPort::NotOpenError10当执行的操作只有在设备已打开的情况下才能成功执行时,会出现此错误。该值在QtSerialPort 5.2 中引入。
QSerialPort::WriteError4写入数据时发生 I/O 错误。
QSerialPort::ReadError5读取数据时发生 I/O 错误。
QSerialPort::ResourceError6资源不可用时发生 I/O 错误,例如设备意外从系统中删除。
QSerialPort::UnsupportedOperationError7运行中的操作系统不支持或禁止所请求的设备操作。
QSerialPort::TimeoutError9发生超时错误。该值在QtSerialPort 5.2 中引入。
QSerialPort::UnknownError8发生不明错误。

另请参阅 QSerialPort::error

enum QSerialPort::StopBits

该枚举描述了所使用的停止位数。

常数说明
QSerialPort::OneStop11 停止位。
QSerialPort::OneAndHalfStop31.5 停止位。仅适用于 Windows 平台。
QSerialPort::TwoStop22 停止位。

另请参阅 QSerialPort::stopBits

属性文档

baudRate : qint32

该属性包含所需方向的数据波特率。

如果设置成功或在打开端口前设置,则返回true ;否则返回false 并设置一个错误代码,该代码可通过访问QSerialPort::error 属性的值获得。要设置波特率,请使用枚举QSerialPort::BaudRate 或任何正 qint32 值。

注意: 如果在打开端口前设置了波特率,则实际的串行端口设置将在QSerialPort::open() 方法中自动完成,随后端口的打开就会成功。

警告: 所有平台都支持设置AllDirections 标志。Windows 仅支持该模式。

警告 在 Windows 上任何方向都会返回相等的波特率。

默认值为 Baud9600,即每秒 9600 比特。

访问功能

qint32 baudRate(QSerialPort::Directions directions = AllDirections) const
bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions = AllDirections)

通知信号:

void baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

[bindable] breakEnabled : bool

注: 该属性支持QProperty 绑定。

该属性保存传输线断开时的状态

成功时返回true ,否则返回false 。如果标志为true ,则传输线处于断开状态;否则处于非断开状态。

注意: 在尝试设置或获取此属性之前,串行端口必须打开;否则将返回false 并设置NotOpenError 错误代码。与 Qt 类的常规属性设置相比,这有点不同寻常。不过,这是一种特殊的使用情况,因为该属性是通过与内核和硬件的交互来设置的。因此,这两种情况不能完全相提并论。

访问功能:

bool isBreakEnabled() const
bool setBreakEnabled(bool set = true)

Notifier 信号:

void breakEnabledChanged(bool set)

[bindable] dataBits : DataBits

注意: 该属性支持QProperty 绑定。

该属性保存帧中的数据位

如果设置成功或在打开端口前设置,则返回true ;否则返回false 并设置一个错误代码,该代码可通过访问QSerialPort::error 属性的值获得。

注: 如果在打开端口前设置,则实际串行端口设置将在QSerialPort::open() 方法中自动完成,随后端口打开成功。

默认值为 Data8,即 8 个数据位。

访问功能:

QSerialPort::DataBits dataBits() const
bool setDataBits(QSerialPort::DataBits dataBits)

通知信号:

void dataBitsChanged(QSerialPort::DataBits dataBits)

dataTerminalReady : bool

该属性保存线路信号 DTR 的状态(高电平或低电平

成功时返回true ,否则返回false 。如果标志为true ,则将 DTR 信号设置为高电平;否则为低电平。

注意: 在尝试设置或获取此属性之前,串行端口必须处于打开状态;否则将返回false ,并将错误代码设置为NotOpenError

访问功能:

bool isDataTerminalReady()
bool setDataTerminalReady(bool set)

Notifier 信号:

void dataTerminalReadyChanged(bool set)

另请参阅 pinoutSignals() 。

[bindable read-only] error : SerialPortError

注: 该属性支持QProperty 绑定。

该属性保存串行端口的错误状态

I/O 设备状态返回错误代码。例如,如果open() 返回false ,或读写操作返回-1 ,则可使用此属性找出操作失败的原因。

调用 clearError() 后,错误代码将被设置为默认的QSerialPort::NoError

访问功能:

QSerialPort::SerialPortError error() const
void clearError()

Notifier 信号:

void errorOccurred(QSerialPort::SerialPortError error)

[bindable] flowControl : FlowControl

注意: 该属性支持QProperty 绑定。

该属性保存所需的流量控制模式

如果设置成功或在打开端口前设置,则返回true ;否则返回false 并设置错误代码,错误代码可通过访问QSerialPort::error 属性的值获得。

注: 如果在打开端口前设置,实际串行端口设置将在端口打开成功后在QSerialPort::open() 方法中自动完成。

默认值为NoFlowControl ,即无流量控制。

访问功能:

QSerialPort::FlowControl flowControl() const
bool setFlowControl(QSerialPort::FlowControl flowControl)

通知信号:

void flowControlChanged(QSerialPort::FlowControl flow)

[bindable] parity : Parity

注意: 该属性支持QProperty 绑定。

该属性保存奇偶校验模式

如果设置成功或在打开端口前设置,则返回true ;否则返回false 并设置错误代码,错误代码可通过访问QSerialPort::error 属性的值获得。

注: 如果在打开端口前设置,则实际串行端口设置将在QSerialPort::open() 方法中自动完成,随后端口打开成功。

默认值为NoParity ,即无奇偶校验。

警告 某些 UNIX 操作系统(如 macOS)不支持CMSPAR 标志。在此类系统中,不支持设置Mark or Space 奇偶校验。

访问功能:

QSerialPort::Parity parity() const
bool setParity(QSerialPort::Parity parity)

通知信号:

void parityChanged(QSerialPort::Parity parity)

requestToSend : bool

该属性保存线路信号 RTS 的状态(高电平或低电平

成功时返回true ,否则返回false 。如果标志为true ,则将 RTS 信号设置为高电平;否则为低电平。

注意: 在尝试设置或获取此属性之前,串行端口必须处于打开状态;否则将返回false ,并将错误代码设置为NotOpenError

注意: HardwareControl 模式下尝试控制 RTS 信号将失败,错误代码设置为UnsupportedOperationError ,因为该信号由驱动程序自动控制。

访问功能:

bool isRequestToSend()
bool setRequestToSend(bool set)

Notifier 信号:

void requestToSendChanged(bool set)

另请参阅 pinoutSignals() 。

[since 6.9] settingsRestoredOnClose : bool

该属性定义关闭时是否恢复端口参数。

端口打开后,类会先缓存其参数,然后再应用用户定义的参数。

如果该属性为true ,串行端口会尝试在关闭端口前恢复缓存参数;否则缓存参数将被丢弃。

默认值为true

注意: 此属性在某些操作系统上可能不起作用。例如,macOS 似乎总是在关闭端口时恢复默认串行端口设置。

此属性在 Qt 6.9 中引入。

访问功能:

bool settingsRestoredOnClose() const
void setSettingsRestoredOnClose(bool restore)

Notifier 信号:

void settingsRestoredOnCloseChanged(bool restore)

[bindable] stopBits : StopBits

注意: 该属性支持QProperty 绑定。

该属性保存帧中的停止位数

如果设置成功或在打开端口前设置,则返回true ;否则返回false 并设置错误代码,错误代码可通过访问QSerialPort::error 属性的值获得。

注: 如果在打开端口前设置,则实际串行端口设置将在端口打开成功后在QSerialPort::open() 方法中自动完成。

默认值为OneStop ,即 1 停止位。

访问功能:

QSerialPort::StopBits stopBits() const
bool setStopBits(QSerialPort::StopBits stopBits)

Notifier 信号:

void stopBitsChanged(QSerialPort::StopBits stopBits)

成员函数 文档

[explicit] QSerialPort::QSerialPort(QObject *parent = nullptr)

用给定的parent 构建一个新的串行端口对象。

[explicit] QSerialPort::QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr)

用给定的parent 构建一个新的串行端口对象,用指定的辅助类serialPortInfo 表示串行端口。

[explicit] QSerialPort::QSerialPort(const QString &name, QObject *parent = nullptr)

用给定的parent 构建一个新的串行端口对象,用指定的name 表示串行端口。

名称应有特定格式;请参阅setPort() 方法。

[virtual noexcept] QSerialPort::~QSerialPort()

必要时关闭串行端口,然后销毁对象。

[signal] void QSerialPort::baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)

该信号在波特率改变后发出。新波特率作为baudRate 传递,方向作为directions 传递。

注: 属性baudRate 的通知信号。

另请参阅 QSerialPort::baudRate

[override virtual] qint64 QSerialPort::bytesAvailable() const

重实现:QIODevice::bytesAvailable() 常量。

返回等待读取的传入字节数。

另请参阅 bytesToWrite() 和read()。

[override virtual] qint64 QSerialPort::bytesToWrite() const

重实现:QIODevice::bytesToWrite() 常量。

返回等待写入的字节数。当控制返回事件循环或调用flush() 时,字节将被写入。

另请参阅 bytesAvailable() 和flush()。

[override virtual] bool QSerialPort::canReadLine() const

重实现:QIODevice::canReadLine() 常量。

如果可以从串行端口读取一行数据,则返回true ;否则返回false

另请参阅 readLine() 。

bool QSerialPort::clear(QSerialPort::Directions directions = AllDirections)

根据给定的方向,丢弃输出或输入缓冲区中的所有字符directions 。这包括清除内部类缓冲区和 UART(驱动器)缓冲区。同时终止待处理的读或写操作。如果成功,则返回true ;否则返回false

注意: 在尝试清除任何缓冲数据之前,串行端口必须处于打开状态;否则将返回false 并设置NotOpenError 错误代码。

[override virtual] void QSerialPort::close()

重新实现:QIODevice::close().

注意: 在尝试关闭串行端口之前,必须先打开串行端口;否则会设置NotOpenError 错误代码。

另请参阅 QIODevice::close().

[signal] void QSerialPort::dataBitsChanged(QSerialPort::DataBits dataBits)

该信号在帧中的数据位发生变化后发出。帧中的新数据位以dataBits 的形式传递。

注: 属性dataBits 的通知信号。

另请参阅 QSerialPort::dataBits

[signal] void QSerialPort::dataTerminalReadyChanged(bool set)

该信号在线路信号 DTR 的状态(高电平或低电平)发生变化后发出。线路信号 DTR 的新状态(高电平或低电平)将作为set 发送。

注: 属性dataTerminalReady 的通知信号。

另请参见 QSerialPort::dataTerminalReady

[signal] void QSerialPort::errorOccurred(QSerialPort::SerialPortError error)

串行端口发生错误时会发出该信号。指定的error 描述了发生的错误类型。

注: 属性error 的通知信号。

另请参阅 QSerialPort::error

[signal] void QSerialPort::flowControlChanged(QSerialPort::FlowControl flow)

该信号在流量控制模式改变后发出。新的流量控制模式作为flow 发送。

注: 属性flowControl 的通知信号。

另请参阅 QSerialPort::flowControl

bool QSerialPort::flush()

该函数将尽可能多的数据从内部写缓冲区写入底层串行端口,而不会阻塞。如果有数据写入,则返回true ;否则返回false

调用该函数可将缓冲区中的数据立即发送到串行端口。成功写入的字节数取决于操作系统。在大多数情况下,无需调用此函数,因为一旦控制权返回到事件循环,QSerialPort 类将自动开始发送数据。如果没有事件循环,请调用waitForBytesWritten() 代替。

注意: 在尝试刷新任何缓冲数据之前,串行端口必须打开;否则将返回false 并设置NotOpenError 错误代码。

另请参阅 write() 和waitForBytesWritten()。

QSerialPort::Handle QSerialPort::handle() const

如果支持平台且串行端口已打开,则返回本地串行端口句柄;否则返回-1

警告: 此函数仅供专家使用;使用风险自负。此外,该函数不保证次 Qt 版本之间的兼容性。

[override virtual] bool QSerialPort::isSequential() const

重实现:QIODevice::isSequential() 常量。

总是返回true 。串行端口是一个顺序设备。

[override virtual] bool QSerialPort::open(QIODeviceBase::OpenMode mode)

重实现:QIODevice::open(QIODeviceBase::OpenMode mode)。

使用 OpenModemode 打开串行端口,如果成功则返回true ,否则返回false 并设置错误代码,错误代码可通过调用error() 方法获取。

如果端口已打开,但设置所需的端口参数失败,该方法将返回false 并自动关闭端口。

警告: mode 必须是QIODeviceBase::ReadOnlyQIODeviceBase::WriteOnlyQIODeviceBase::ReadWrite 。不支持其他模式。

注意: 由于历史原因,在成功打开errorOccurred() 信号时,会发出NoError 错误代码。保留这一行为是为了保持向后兼容性。

另请参阅 QIODeviceBase::OpenModesetPort()。

[signal] void QSerialPort::parityChanged(QSerialPort::Parity parity)

该信号在奇偶校验模式更改后发出。新的奇偶校验模式作为parity 发送。

注: 属性parity 的通知信号。

另请参见 QSerialPort::parity

QSerialPort::PinoutSignals QSerialPort::pinoutSignals()

以位图格式返回线路信号的状态。

根据该结果,可以通过应用掩码 "AND "来分配所需的信号状态,其中掩码是QSerialPort::PinoutSignals 中所需的枚举值。

注: 该方法执行系统调用,从而确保正确返回线路信号状态。当底层操作系统无法提供有关更改的适当通知时,这一点很有必要。

注意: 在尝试获取引脚输出信号之前,串行端口必须打开;否则将返回NoSignal 并设置NotOpenError 错误代码。

另请参阅 QSerialPort::dataTerminalReadyQSerialPort::requestToSend

QString QSerialPort::portName() const

返回setPort() 设置的名称或传递给QSerialPort 构造函数的名称。该名称很短,即从设备的内部变量系统位置提取并转换而来。转换算法与平台有关:

平台简要说明
Windows从系统位置中删除前缀"\\.\"或"//./",并返回字符串的剩余部分。
Unix、BSD从系统位置移除前缀"/dev/",并返回字符串的剩余部分。

另请参阅 setPortName()、setPort() 和QSerialPortInfo::portName()。

qint64 QSerialPort::readBufferSize() const

返回内部读取缓冲区的大小。这限制了客户端在调用read() 或readAll() 方法之前可以接收的数据量。

读取缓冲区大小为0 (默认值)意味着缓冲区没有大小限制,确保不会丢失数据。

另请参阅 setReadBufferSize() 和read()。

[override virtual protected] qint64 QSerialPort::readData(char *data, qint64 maxSize)

重实现:QIODevice::readData(char *data, qint64 maxSize)。

[override virtual protected] qint64 QSerialPort::readLineData(char *data, qint64 maxSize)

重实现:QIODevice::readLineData(char *data, qint64 maxSize)。

[signal] void QSerialPort::requestToSendChanged(bool set)

该信号在线路信号 RTS 的状态(高电平或低电平)发生变化后发出。线路信号 RTS 的新状态(高电平或低电平)将作为set 发送。

注: 属性requestToSend 的通知信号。

另请参见 QSerialPort::requestToSend

void QSerialPort::setPort(const QSerialPortInfo &serialPortInfo)

设置存储在串行端口信息实例serialPortInfo 中的端口。

另请参阅 portName() 和QSerialPortInfo

void QSerialPort::setPortName(const QString &name)

设置串行端口的name

必要时,串行端口名称可以是短名称或长系统位置。

另请参阅 portName() 和QSerialPortInfo

void QSerialPort::setReadBufferSize(qint64 size)

设置QSerialPort 的内部读取缓冲区大小为size 字节。

如果缓冲区大小限制为某一特定大小,则QSerialPort 不会缓冲超过此大小的数据。缓冲区大小为0 的特殊情况意味着读取缓冲区是无限的,所有传入数据都会被缓冲。这是默认情况。

如果只在特定时间点读取数据(例如在实时流应用程序中),或者如果串行端口需要防止接收过多数据(最终可能导致应用程序内存不足),则此选项非常有用。

另请参阅 readBufferSize() 和read()。

[signal, since 6.9] void QSerialPort::settingsRestoredOnCloseChanged(bool restore)

该信号在settingsRestoredOnClose 属性更改后发出。restore 参数包含属性的新值。

注: 属性settingsRestoredOnClose 的通知信号。

该函数在 Qt 6.9 中引入。

另请参阅 QSerialPort::settingsRestoredOnClose

[signal] void QSerialPort::stopBitsChanged(QSerialPort::StopBits stopBits)

该信号在帧的停止位数发生变化后发出。帧中新的停止位数以stopBits 的形式传递。

注: 属性stopBits 的通知信号。

另请参阅 QSerialPort::stopBits

[override virtual] bool QSerialPort::waitForBytesWritten(int msecs = 30000)

重实现:QIODevice::waitForBytesWritten(int msecs)。

该函数将阻塞,直到至少有一个字节被写入串行端口且bytesWritten() 信号发出。函数将在msecs 毫秒后超时;默认超时为 30000 毫秒。如果msecs 为-1,则函数不会超时。

如果发出bytesWritten() 信号,函数将返回true ;否则将返回false (如果发生错误或操作超时)。

[override virtual] bool QSerialPort::waitForReadyRead(int msecs = 30000)

重实现:QIODevice::waitForReadyRead(int msecs)。

该函数会阻塞,直到有新数据可供读取且readyRead() 信号已发出。函数将在msecs 毫秒后超时;默认超时时间为 30000 毫秒。如果msecs 为-1,则函数不会超时。

如果readyRead() 信号已发出且有新数据可供读取,则函数返回true ;否则返回false (如果发生错误或操作超时)。

另请参见 waitForBytesWritten()。

[override virtual protected] qint64 QSerialPort::writeData(const char *data, qint64 maxSize)

重实现:QIODevice::writeData(const char *data, qint64 maxSize)。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.