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) |
(since 6.10) void | setWriteBufferSize(qint64 size) |
| bool | settingsRestoredOnClose() const |
| QSerialPort::StopBits | stopBits() const |
(since 6.10) qint64 | writeBufferSize() 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 提供了一组函数,这些函数会暂停调用线程,直到发出特定信号为止。这些函数可用于实现阻塞式串行端口:
- waitForReadyRead() 会阻塞调用,直到有新数据可供读取。
- waitForBytesWritten() 会阻塞调用,直到向串口写入一个数据负载为止。
请参阅以下示例:
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() 来查明上次发生的错误类型。
使用阻塞式串口进行编程与使用非阻塞式串口进行编程有根本区别。阻塞式串口不需要事件循环,通常能使代码更简洁。但在图形用户界面(GUI)应用程序中,应仅在非 GUI 线程中使用阻塞式串口,以避免用户界面冻结。
有关这些方法的更多详细信息,请参阅示例应用程序。
QSerialPort 类还可以与QTextStream 和QDataStream 中的流运算符(operator<<() 和 operator>>())配合使用。不过需要注意一点:在使用重载的 operator>>() 运算符进行读取之前,请确保有足够的数据可用。
另请参阅 QSerialPortInfo 。
成员类型文档
enum QSerialPort::BaudRate
此枚举描述了通信设备的工作波特率。
注意: 此枚举中仅 列出了最常见的标准波特率。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::Baud1200 | 1200 | 1200 波特。 |
QSerialPort::Baud2400 | 2400 | 2400 波特。 |
QSerialPort::Baud4800 | 4800 | 4800 波特。 |
QSerialPort::Baud9600 | 9600 | 9600 波特。 |
QSerialPort::Baud19200 | 19200 | 19200 波特。 |
QSerialPort::Baud38400 | 38400 | 38400 波特。 |
QSerialPort::Baud57600 | 57600 | 57600 波特。 |
QSerialPort::Baud115200 | 115200 | 115200 波特。 |
另请参阅 QSerialPort::baudRate 。
enum QSerialPort::DataBits
此枚举描述了所使用的数据位数。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::Data5 | 5 | 每个字符的数据位数为 5。该枚举用于 Baudot 编码。通常仅在旧式设备(如电传打字机)中才有意义。 |
QSerialPort::Data6 | 6 | 每个字符中的数据位数为 6。此选项很少使用。 |
QSerialPort::Data7 | 7 | 每个字符的数据位数为7。用于标准ASCII。通常仅适用于电传打字机等老式设备。 |
QSerialPort::Data8 | 8 | 每个字符的数据位数为 8。该格式适用于大多数类型的数据,因为其大小与一个字节的大小相匹配。在较新的应用程序中,该格式几乎被普遍采用。 |
另请参阅 QSerialPort::dataBits 。
enum QSerialPort::Direction
flags QSerialPort::Directions
此枚举描述了数据传输的可能方向。
注意: 在某些操作系统(例如 POSIX 类系统)中,此枚举 用于分别设置设备各方向的波特率。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::Input | 1 | 输入方向。 |
QSerialPort::Output | 2 | 输出方向。 |
QSerialPort::AllDirections | Input | Output | 同时朝两个方向。 |
“Directions”类型是QFlags<Direction> 的 typedef 定义。它存储 Direction 值的按“或”运算组合。
enum QSerialPort::FlowControl
此枚举描述了所使用的流控制方式。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::NoFlowControl | 0 | 无流量控制。 |
QSerialPort::HardwareControl | 1 | 硬件流控制 (RTS/CTS)。 |
QSerialPort::SoftwareControl | 2 | 软件流量控制 (XON/XOFF)。 |
另请参阅 QSerialPort::flowControl 。
enum QSerialPort::Parity
此枚举描述了所使用的奇偶校验方案。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::NoParity | 0 | 发送时不包含奇偶校验位。这是最常见的奇偶校验设置。错误检测由通信协议处理。 |
QSerialPort::EvenParity | 2 | 每个字符中的 1 位数量(包括奇偶校验位)总是偶数。 |
QSerialPort::OddParity | 3 | 每个字符中的“1”位数量(包括奇偶校验位)总是奇数。这可确保每个字符中至少发生一次状态转换。 |
QSerialPort::SpaceParity | 4 | 空闲奇偶校验。奇偶校验位在空闲信号状态下发送。它不提供错误检测信息。 |
QSerialPort::MarkParity | 5 | 标记奇偶校验。奇偶校验位始终设置为标记信号状态(逻辑 1)。它不提供错误检测信息。 |
另请参阅 QSerialPort::parity 。
enum QSerialPort::PinoutSignal
flags QSerialPort::PinoutSignals
此枚举描述了 RS-232 引脚布局的可能信号。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::NoSignal | 0x00 | 线路未激活 |
QSerialPort::DataTerminalReadySignal | 0x04 | DTR(数据终端就绪)。 |
QSerialPort::DataCarrierDetectSignal | 0x08 | DCD(数据载波检测)。 |
QSerialPort::DataSetReadySignal | 0x10 | DSR(数据终端就绪)。 |
QSerialPort::RingIndicatorSignal | 0x20 | RNG(振铃指示)。 |
QSerialPort::RequestToSendSignal | 0x40 | RTS(请求发送)。 |
QSerialPort::ClearToSendSignal | 0x80 | CTS(允许发送)。 |
QSerialPort::SecondaryTransmittedDataSignal | 0x100 | STD(次要传输数据)。 |
QSerialPort::SecondaryReceivedDataSignal | 0x200 | SRD(辅助接收数据)。 |
PinoutSignals 类型是QFlags<PinoutSignal> 的 typedef。它存储 PinoutSignal 值的按“或”运算组合。
另请参阅 pinoutSignals()、QSerialPort::dataTerminalReady 以及QSerialPort::requestToSend 。
enum QSerialPort::SerialPortError
此枚举描述了QSerialPort::error 属性可能包含的错误。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::NoError | 0 | 未发生错误。 |
QSerialPort::DeviceNotFoundError | 1 | 尝试打开不存在的设备时发生错误。 |
QSerialPort::PermissionError | 2 | 尝试打开已被其他进程打开的设备时发生错误,或者用户没有足够的权限和凭据来打开该设备。 |
QSerialPort::OpenError | 3 | 在尝试打开此对象中已打开的设备时发生错误。 |
QSerialPort::NotOpenError | 10 | 当执行某项操作时,如果该设备未打开则该操作无法成功执行,此时会发生此错误。此值在QtSerialPort 5.2中引入。 |
QSerialPort::WriteError | 4 | 写入数据时发生 I/O 错误。 |
QSerialPort::ReadError | 5 | 读取数据时发生 I/O 错误。 |
QSerialPort::ResourceError | 6 | 当资源不可用时发生 I/O 错误,例如设备意外从系统中移除时。 |
QSerialPort::UnsupportedOperationError | 7 | 所请求的设备操作不受当前运行的操作系统支持或被禁止。 |
QSerialPort::TimeoutError | 9 | 发生超时错误。该值自QtSerialPort 5.2 起引入。 |
QSerialPort::UnknownError | 8 | 发生了一个未识别的错误。 |
另请参阅 QSerialPort::error 。
enum QSerialPort::StopBits
此枚举描述了所使用的停止位数量。
| 常量 | 值 | 描述 |
|---|---|---|
QSerialPort::OneStop | 1 | 1 个停止位。 |
QSerialPort::OneAndHalfStop | 3 | 1.5 个停止位。这仅适用于 Windows 平台。 |
QSerialPort::TwoStop | 2 | 2 个停止位。 |
另请参阅 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) |
通知器信号:
| 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) |
通知信号:
| 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() |
通知器信号:
| 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) |
通知信号:
| void | requestToSendChanged(bool set) |
另请参阅 pinoutSignals()。
[since 6.9] settingsRestoredOnClose : bool
此属性用于定义在关闭时是否应恢复端口参数
端口打开后,该类会在应用用户定义的参数之前将参数缓存起来。
如果该属性为true ,则串行端口会在关闭前尝试恢复缓存的参数;否则,缓存的参数将被丢弃。
默认值为true 。
注意:此 属性在某些操作系统上可能无效。例如,macOS 在关闭端口时似乎总是会恢复默认的串行端口设置。
该枚举在 Qt 6.9 中引入。
访问函数:
| bool | settingsRestoredOnClose() const |
| void | setSettingsRestoredOnClose(bool restore) |
通知信号:
| 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) |
通知信号:
| 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() const。
返回等待读取的传入字节数。
另请参见 bytesToWrite() 和read()。
[override virtual] qint64 QSerialPort::bytesToWrite() const
重新实现了:QIODevice::bytesToWrite() const。
返回待写入的字节数。当控制权返回事件循环或调用flush() 时,这些字节将被写入。
另请参阅 bytesAvailable() 和flush()。
[override virtual] bool QSerialPort::canReadLine() const
重写了:QIODevice::canReadLine() const。
如果能从串行端口读取一行数据,则返回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() const。
始终返回 `true`。串行端口是一种顺序设备。
[override virtual] bool QSerialPort::open(QIODeviceBase::OpenMode mode)
重写:QIODevice::open (QIODeviceBase::OpenMode 模式)。
使用 OpenModemode 打开串行端口,如果成功则返回true ;否则返回false 并设置一个错误代码,该错误代码可通过调用error() 方法获取。
如果端口已打开,但设置所需端口参数失败,则该方法返回false 并自动关闭端口。
警告: mode 必须为QIODeviceBase::ReadOnly 、QIODeviceBase::WriteOnly 或QIODeviceBase::ReadWrite 。不支持其他模式。
注意:由于 历史原因,成功打开连接后会触发errorOccurred()信号,并伴随NoError 错误代码。此行为被保留以保持向后兼容性。
另请参阅 QIODeviceBase::OpenMode 和setPort()。
[signal] void QSerialPort::parityChanged(QSerialPort::Parity parity)
在奇偶校验模式发生变更后,将发出此信号。新的奇偶校验模式作为parity 参数传递。
注意: 这是属性parity的通知 信号。
另请参阅 QSerialPort::parity 。
QSerialPort::PinoutSignals QSerialPort::pinoutSignals()
以位图格式返回线路信号的状态。
根据该结果,可以通过应用“与(AND)”掩码来获取所需信号的状态,其中掩码是来自QSerialPort::PinoutSignals 中的目标枚举值。
注意:此 方法会执行系统调用,从而确保正确返回线路信号的状态。当底层操作系统无法提供关于状态变化的正确通知时,此操作是必要的。
注意: 在尝试获取引脚信号之前,必须先打开串行端口 ;否则将返回NoSignal 并设置NotOpenError 错误代码。
另请参阅 QSerialPort::dataTerminalReady 和QSerialPort::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 。
串口名称可作为短名称传递,必要时也可作为系统的完整路径传递。
注意:此 函数允许设置未包含在list of available ports 中的端口,或者当使用名称字符串构造QSerialPortInfo 实例时,该实例会返回null 对象的端口。如果这不是必需的,请在确认名称会生成有效的QSerialPortInfo 对象后,改用setPort()。
另请参阅 portName() 和QSerialPortInfo 。
void QSerialPort::setReadBufferSize(qint64 size)
将QSerialPort 的内部读取缓冲区大小设置为size 字节。
如果缓冲区大小被限制为特定值,QSerialPort 就不会缓冲超过该大小数据。当缓冲区大小为0 时,读缓冲区将无限制,所有传入数据都会被缓冲。这是默认行为。
当仅在特定时间点读取数据(例如在实时流媒体应用程序中),或者需要保护串行端口免受过多数据接收(这最终可能导致应用程序内存不足)时,此选项非常有用。
传递负值将禁用内部缓冲区,从而有效阻止任何读取操作。
另请参阅 readBufferSize() 和read()。
[since 6.10] void QSerialPort::setWriteBufferSize(qint64 size)
将QSerialPort 的内部写入缓冲区大小设置为size 字节。
通过串口发送数据的速度相对较慢,因此实际上在调用write() 时,数据并不会立即发送。数据会先存储在中间缓冲区中,随后分批写出。
因此,如果写入的数据过多,或者写入速率超过底层串口所能处理的范围,会导致内部缓冲区不断扩大。这最终可能导致应用程序内存耗尽,特别是在内存资源有限的设备上。
此方法允许将内部缓冲区限制在特定大小。如果下一次写入尝试超过缓冲区容量,write() 方法将返回实际存储在缓冲区中的字节数。用户有责任在收到bytesWritten() 信号后,或在waitForBytesWritten() 方法返回true 之后,重新尝试写入剩余字节。
向该方法传递0 表示写入缓冲区不受限制,传递给write()的所有数据都将被缓冲。这是默认行为。
传递负值的效果与传递0 相同。
该函数在 Qt 6.10 中引入。
另请参阅 writeBufferSize() 和write()。
[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()。
[since 6.10] qint64 QSerialPort::writeBufferSize() const
返回内部写入缓冲区的大小。
写入缓冲区大小为0 (默认值)表示该缓冲区没有大小限制。
该函数自 Qt 6.10 起引入。
另请参阅 setWriteBufferSize() 和write()。
[override virtual protected] qint64 QSerialPort::writeData(const char *data, qint64 maxSize)
重新实现了:QIODevice::writeData(const char *data, qint64 maxSize)。
© 2026 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.