QSerialPort 类

QSerialPort 类用于访问串口。 更多内容…

属性 方法
头文件: #include <QSerialPort>
qmake: QT += serialport
父类: QIODevice

注意: 该类中的所有函数均为 reentrant.

公共成员类型

类型 方法
enum BaudRate {Baud1200, Baud2400, Baud4800, Baud9600, Baud19200, …, UnknownBaud }
enum DataBits { Data5, Data6, Data7, Data8, UnknownDataBits }
enum Direction { Input, Output, AllDirections }
flags Directions
enum FlowControl { NoFlowControl, HardwareControl, SoftwareControl, UnknownFlowControl }
enum Parity { NoParity, EvenParity, OddParity, SpaceParity, MarkParity, UnknownParity }
enum PinoutSignal { NoSignal, TransmittedDataSignal, ReceivedDataSignal, DataTerminalReadySignal, DataCarrierDetectSignal, …, SecondaryReceivedDataSignal }
flags PinoutSignals
enum SerialPortError { NoError, DeviceNotFoundError, PermissionError, OpenError, NotOpenError, …, UnknownError }
enum StopBits { OneStop, OneAndHalfStop, TwoStop, UnknownStopBits }

属性

属性名 类型
baudRate qint32
breakEnabled bool
dataBits dataBits
dataTerminalReady bool
error SerialPortError
flowControl FlowControl
parity Parity
requestToSend bool
stopBits StopBits

公共成员函数

返回类型 函数名
QSerialPort(const QSerialPortInfo &serialPortInfo, QObject *parent = nullptr)
QSerialPort(const QString &name, QObject *parent = nullptr)
QSerialPort
virtual ~QSerialPort()
qint32 baudRate(QSerialPort::Directions directions = AllDirections) const
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 sendBreak(int duration = 0)
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)
bool setStopBits(QSerialPort::StopBits stopBits)
QSerialPort::StopBits stopBits() const

重写公共成员函数

返回类型 函数名
virtual bool atEnd() const override
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(QIODevice::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)
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 帮助类来获取可用串口的信息,这个类可以枚举系统中的所有串口,当您想使用某个串口时,使用这个类可以获得正确的串口名。可以通过把 QSerialPortInfo 类实例对象作为参数传递给 setPort() 或 setPortName() 方法来指定串口设备。

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

注意: 串口总是以独占访问的方式打开,即其它进程或线程无法访问已经打开的串口。

请使用 close() 方法来关闭串口或取消串口读写操作。

串口打开以后,QSerialPort 会检查串口当前的配置并初始化。您可以使用 setBaudRate(), setDataBits(), setParity(), setStopBits(), 和 setFlowControl() 方法重新配置串口。

QSerialPort::dataTerminalReadyQSerialPort::requestToSend 属性用来设置串口引脚信号,还可以使用 pinoutSignals() 方法来查询串口引脚信号。

当串口准备好时,可以用 read() 或 write() 方法来读写串口。您还可以使用 readLine() 和 readAll() 这样的便捷方法读写串口。如果数据没有一次读完,剩下的数据会被接下来有新数据被添加至 QSerialPort 内部读缓冲器时再读出。您可以使用 setReadBufferSize() 方法来设置串口读缓冲区的大小。

QSerialPort 提供了一组函数来暂停线程调用直到触发特定的信号。这些函数可以用来阻塞串口:

阻塞串口代码示例:

  1. int numRead = 0, numReadTotal = 0;
  2. char buffer[50];
  3. for (;;) {
  4. numRead = serial.read(buffer, 50);
  5. // Do whatever with the array
  6. numReadTotal += numRead;
  7. if (numRead == 0 && !serial.waitForReadyRead())
  8. break;
  9. }

如果 waitForReadyRead() 返回 false,说明串口连接已经关闭或者有错误出现。

如果串口出现错误,QSerialPort 将会发射 errorOccurred() 信号。您还可以调用 error() 方法来查询串口最近一次出现错误的类型。

注意: 在 QSerialPort 中,并非所有的错误都是以操作系统平台无关的方式处理。诸如帧、奇偶校验、终止条件这样的错误需要由应用程序代码来处理,可能需要使用设备描述符中的操作系统相关的 ioctls 和(或)解析串口数据流中的字节填充。

编程阻塞串口与编程非阻塞串口完全不同。阻塞串口不需要事件循环,通常会让编程更简单。然而,在图形用户界面程序中,阻塞串口应该仅用于非图形用户界面线程,这样做可以避免用户界面卡顿。

若想更深入了解这方面内容,请参考 example 中的例程。

QSerialPort 类还可以与 QTextStreamQDataStream 的流运算符(<<()>>())一起使用。有一点需要注意:在使用流运算符 >>() 之前请确保串口缓冲区有足够多的数据可读。

另请参阅 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::UnknownBaud -1 波特率未知。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值

另请参阅 QSerialPort::baudRate.

enum QSerialPort::DataBits


该枚举描述了每个字符所使用的数据比特数。

常量 描述
QSerialPort::Data5 5 每个字符用5比特表示,用于波特码,常见于旧式设备,例如电传打字机
QSerialPort::Data6 6 每个字符用6比特表示,很少这样用
QSerialPort::Data7 7 每个字符用7比特表示,用于ASCII码,常见于旧式设备,例如电传打字机
QSerialPort::Data8 8 每个字符用8比特表示,大部分数据采用此格式,因为1个字节包含8比特。它在新应用中广泛使用
QSerialPort::UnknownDataBits -1 比特数未知。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值

另请参阅 QSerialPort::dataBits.

enum QSerialPort::Direction

flags QSerialPort::Directions


该枚举描述了串口数据传输方向。

注意: 在某些操作系统中(例如类 POSIX 系统),该枚举对串口的输入/输出波特率单独设置。

常量 描述
QSerialPort::Input 1 输入方向
QSerialPort::Output 2 输出方向
QSerialPort::AllDirections `Input Output` 输入和输出同时进行

方向类型是 QFlags 的类型定义(typedef),它保存了方向值的 OR 组合。

enum QSerialPort::FlowControl


该枚举描述了串口使用的流控制方式。

常量 描述
QSerialPort::NoFlowControl 0 没有流控制
QSerialPort::HardwareControl 1 硬件流控制 (RTS/CTS)
QSerialPort::SoftwareControl 2 软件流控制 (XON/XOFF)
QSerialPort::UnknownFlowControl -1 流控制未知。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值

另请参阅 QSerialPort::flowControl.

enum QSerial::Parity


该枚举描述了串口使用的奇偶校验模式。

常量 描述
QSerialPort::NoParity 0 没有奇偶校验。这是最常见的奇偶校验设置。错误检测由通信协议完成
QSerialPort::EvenParity 2 每个字符包含1比特奇偶校验,字符比特数为偶数(含奇偶校验位)
QSerialPort::OddParity 3 每个字符包含1比特奇偶校验,字符比特数为奇数(含奇偶校验位)。它确保了每个字符至少有一次状态转换
QSerialPort::SpaceParity 4 间隔奇偶校验。奇偶校验位在间隔信号中发送。它不提供错误检测信息
QSerialPort::MarkParity 5 标志奇偶校验。奇偶校验位总是被置为标志信号(逻辑 1)。它不提供错误检测信息
QSerialPort::UnknownParity -1 奇偶校验未知。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值

另请参阅 QSerialPort::parity.

enum QSerialPort::PinoutSignal

flags QSerialPort::PinoutSignals


该枚举用于描述串口引脚信号。

常量 描述
QSerialPort::NoSignal 0x00 无信号
QSerialPort::TransmittedDataSignal 0x01 TxD (发送数据)。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值
QSerialPort::ReceivedDataSignal 0x02 RxD (接收数据)。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值
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 的类型定义(typedef),它保存了PinoutSignal值的 OR 组合。

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

enum QSerialPort::SerialPortError


该枚举描述了 QSerialPort::error 属性的错误类型。

常量 描述
QSerialPort::NoError 0 没有错误
QSerialPort::DeviceNotFoundError 1 尝试打开一个不存在的串口设备
QSerialPort::PermissionError 2 其它进程试图打开一个已经开启的串口设备或者用户没有足够的权限打开串口
QSerialPort::OpenError 3 在当前对象中试图打开一个已经开启的串口
QSerialPort::NotOpenError 13 在串口未开启时执行某个操作。这个值从 QtSerialPort 5.2 开始使用
QSerialPort::ParityError 4 读串口时硬件检测到奇偶校验错误。这个值已经废弃了。强烈建议您在新开发的代码中不使用这个值
QSerialPort::FramingError 5 读串口时硬件检测到帧错误。这个值已经废弃了。强烈建议您在新开发的代码中不使用这个值
QSerialPort::BreakConditionError 6 串口输入线上检测到终止条件。这个值已经废弃了。强烈建议您在新开发的代码中不使用这个值
QSerialPort::WriteError 7 写串口时出现的 I/O 错误
QSerialPort::ReadError 8 读串口时出现的 I/O 错误
QSerialPort::ResourceError 9 当资源无法访问时出现的 I/O 错误。例如:当串口设备意外断开时
QSerialPort::UnsupportedOperationError 10 操作系统禁止或不支持请求的串口操作
QSerialPort::TimeoutError 12 超时错误。这个值从 QtSerialPort 5.2 开始使用
QSerialPort::UnknownError 11 未知错误

另请参阅 QSerialPort::error.

enum QSerialPort::StopBits


该枚举描述了串口停止位的比特数。

常量 描述
QSerialPort::OneStop 1 1比特停止位
QSerialPort::OneAndHalfStop 3 1.5比特停止位(仅适用于Windows系统)
QSerialPort::TwoStop 2 2比特停止位
QSerialPort::UnknownStopBits -1 停止位比特数未知。这个值已经废弃了。此处保留是为了兼容旧的代码。强烈建议您在新开发的代码中不使用这个值

另请参阅 QSerialPort::stopBits.

成员属性文档

baudRate : qint32


该属性为串口在指定方向(输入/输出)上的通信波特率。

如果串口波特率设置成功或者打开串口前设置好波特率,那么返回true,否则返回false并且把错误码置1。该错误码可以通过读取 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)

breakEnabled : bool


该属性为串口是否终止传输的标志位。

若串口终止通信,则该属性为 true,否则为 false

注意: 在设置或访问该属性前串口必须已经打开,否则返回 false 并且 NotOpenError 错误码将被置 1。这一点与常规的 Qt 类属性设置不同。然而,这种差异性源于该属性是通过操作系统内核与串口硬件之间的交互来设置的,因此 Qt 串口类属性与其它 Qt 类属性不完全等同。

该属性从 Qt 5.5 开始使用。

存取函数:

返回类型 函数名
bool isBreakEnabled() const
bool setBreakEnabled(bool set = true)

通知信号:

返回类型 函数名
void breakEnabledChanged(bool set)

dataBits : DataBits


该属性为串口数据帧中的比特数。

若设置成功或者打开串口前设置好该属性,那么返回true,否则返回false并且把错误码置1。该错误码可以通过读取 QSerialPort::error 属性的值获得。

注意: 如果在打开串口前设置该属性,那么真实的串口设置将会在串口打开后,在 QSerialPort::open() 方法中自动完成。

该属性的默认值为 Data8,即数据帧为8比特。

存取函数:

返回类型 函数名
QSerialPort::DataBits dataBits() const
bool setDataBits(QSerialPort::DataBits dataBits)

通知信号:

返回类型 函数名
void dataBitsChanged(QSerialPort::DataBits dataBits)

dataTerminalReady : bool


该属性为串口信号线 DTR 的状态(高或低)。

如果串口信号线 DTR 被置为高电平,则返回true,否则返回false.

注意: 在设置或访问该属性前串口必须已经打开,否则返回 false 并且 NotOpenError 错误码将被置 1

存取函数:

返回类型 函数名
bool isDataTerminalReady()
bool setDataTerminalReady(bool set)

通知信号:

返回类型 函数名
void dataTerminalReadyChanged(bool set)

另请参阅 pinoutSignals().

error : SerialPortError


该属性为串口的错误码。

串口设备会返回一个错误码。例如:如果函数 open() 返回false,或者读/写操作返回-1,该属性可以用来判断操作失败的原因。

当调用clearError()函数后,错误码会被置为默认值 QSerialPort::NoError.

存取函数:

返回类型 函数名
QSerialPort::SerialPortError error() const
void clearError()

flowControl : FlowControl


该属性为串口使用的流控制方式。

若设置成功或者打开串口前设置好该属性,那么返回true,否则返回false并且把错误码置1。该错误码可以通过读取 QSerialPort::error 属性的值获得。

注意: 如果在打开串口前设置该属性,那么真实的串口设置将会在串口打开后,在 QSerialPort::open() 方法中自动完成。

该属性的默认值为 NoFlowControl,即没有流控制。

存取函数:

返回类型 函数名
QSerialPort::FlowControl flowControl() const
bool setFlowControl(QSerialPort::FlowControl flowControl)

通知信号:

返回类型 函数名
void flowControlChanged(QSerialPort::FlowControl flow)

parity : Parity


该属性为串口使用的奇偶校验模式。

若设置成功或者打开串口前设置好该属性,那么返回true,否则返回false并且把错误码置1。该错误码可以通过读取 QSerialPort::error 属性的值获得。

注意: 如果在打开串口前设置该属性,那么真实的串口设置将会在串口打开后,在 QSerialPort::open() 方法中自动完成。

该属性的默认值为 NoParity,即没有奇偶校验。

存取函数:

返回类型 函数名
QSerialPort::Parity parity() const
bool setParity(QSerialPort::Parity parity)

通知信号:

返回类型 函数名
void parityChanged(QSerialPort::Parity parity)

requestToSend : bool


该属性为串口信号线 RTS 的状态(高或低)。

如果串口信号线 RTS 被置为高电平,则返回true,否则返回false.

注意: 在设置或访问该属性前串口必须已经打开,否则返回 false 并且 NotOpenError 错误码将被置 1

注意: 在 HardwareControl 模式下直接控制 RTS 信号会出错, 错误码 UnsupportedOperationError 会被置1,因为 RTS 信号由驱动自动控制。

存取函数:

返回类型 函数名
bool isRequestToSend()
bool setRequestToSend(bool set)

通知信号:

返回类型 函数名
void requestToSendChanged(bool set)

另请参阅 pinoutSignals().

stopBits : StopBits


该属性为串口帧的停止位比特数。

若设置成功或者打开串口前设置好该属性,那么返回true,否则返回false并且把错误码置1。该错误码可以通过读取 QSerialPort::error 属性的值获得。

注意: 如果在打开串口前设置该属性,那么真实的串口设置将会在串口打开后,在 QSerialPort::open() 方法中自动完成。

该属性的默认值为 OneStop, 即1比特停止位。

存取函数:

返回类型 函数名
QSerialPort::StopBits stopBits() const
bool setStopBits(QSerialPort::StopBits stopBits)

通知信号:

返回类型 函数名
void stopBitsChanged(QSerialPort::StopBits stopBits)

成员函数文档

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


创建一个新的串口对象并指定父对象,用指定的帮助类 serialPortInfo 表示串口。

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


创建一个新的串口对象并指定父对象,用指定的串口名来表示串口。

串口名必须符合特定的格式,详见 setPort() 方法。

QSerialPort::QSerialPort(QObject *parent = nullptr)


创建一个新的串口对象并指定父对象。

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


当串口通信波特率改变时会触发该信号。新的波特率在参数 baudRate 中,数据传输方向在参数 directions 中。

注意: 这是 QSerialPort 类成员属性 baudRate 的通知信号。

另请参阅 QSerialPort::baudRate.

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


当串口帧数据比特数改变时会触发该信号。新的帧数据比特数在参数 dataBits 中。

注意: 这是 QSerialPort 类成员属性 dataBits 的通知信号。

另请参阅 QSerialPort::dataBits.

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


当串口信号线 DTR 的电平状态改变时会触发该信号。新的电平状态(高或低)在参数 set 中。

注意: 这是 QSerialPort 类成员属性 dataTerminalReady 的通知信号。

另请参阅 QSerialPort::dataTerminalReady.

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


当串口出错时会触发该信号。错误类型码在参数 error 中。

此函数从 Qt 5.8 开始使用。

另请参阅 QSerialPort::error.

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


当串口流控制方式改变时会触发该信号。新的流控制方式在参数 flow 中。

注意: 这是 QSerialPort 类成员属性 flowControl 的通知信号。

另请参阅 QSerialPort::flowControl.

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


当串口的奇偶校验模式改变时会触发该信号。新的奇偶校验模式在参数 parity 中。

注意: 这是 QSerialPort 类成员属性 parity 的通知信号。

另请参阅 QSerialPort::parity.

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


当串口信号线 RTS 的电平状态改变时会触发该信号。新的电平状态(高或低)在参数 set 中。

注意: 这是 QSerialPort 类成员属性 requestToSend 的通知信号。

另请参阅 QSerialPort::requestToSend.

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


当串口帧停止位比特数改变时会触发该信号。新的帧停止位比特数在参数 stopBits 中。

注意: 这是 QSerialPort 类成员属性 stopBits 的通知信号。

另请参阅 QSerialPort::stopBits.

[virtual] QSerialPort::~QSerialPort()


关闭串口,若有必要,销毁对象。

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


该函数是 QIODevice::atEnd() 的重写函数。

若串口有更多数据待读取,函数返回true,否则返回false.

该函数常出现在循环中读取串口数据,代码示例:

  1. // This slot is connected to QSerialPort::readyRead()
  2. void QSerialPortClass::readyReadSlot()
  3. {
  4. while (!port.atEnd()) {
  5. QByteArray data = port.read(100);
  6. ....
  7. }
  8. }

另请参阅 bytesAvailable() 和 readyRead().

[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)


清空串口输入/输出(取决于串口通信方向)缓冲区中的数据。包括清空内部类缓冲器和串口驱动缓冲区,并且终止后续的读/写串口操作。如果清空串口缓冲区成功,函数返回true,否则返回false

注意: 清空串口缓冲区之前串口必须是打开的,否则函数返回false并且将 NotOpenError 错误码置1

[override virtual] void QSerialPort::close()


该函数是 QIODevice::close() 的重写函数。

注意: 串口关闭前必须处于打开状态,否则会将 NotOpenError 错误码置1

另请参阅 QIODevice::close().

bool QSerialPort::flush()


该函数以非阻塞的方式把内部写缓冲区中的数据尽可能的写入串口。若写入成功,返回返回true,否则返回false

调用该函数把缓冲区中的数据立即发送至串口,成功发送的数据字节数取决于操作系统。大部分情况下无需调用此函数,因为当控制权交还给事件循环后,QSerialPort 类会自动发送数据。当没有事件循环时,调用 waitForBytesWritten() 函数。

注意: 在把缓冲区数据写入串口前串口必须处于打开状态,否则函数返回false并且将 NotOpenError 错误码置1

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

QSerialPort::Handle QSerialPort::handle() const


如果操作系统支持并且串口是打开的,返回原生串口句柄,否则返回-1

警告: 该函数仅限专家使用并且需要承担相应的风险。并且该函数在 Qt 的小版本中不保证兼容性。

该函数从 Qt 5.2 开始使用。

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


该函数是 QIODevice::isSequential() 的重写函数。

该函数总是返回true,因为串口为顺序设备。

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


该函数是 QIODevice::open(QIODevice::OpenMode mode) 的重写函数。

使用 OpenMode 模式打开串口。若串口打开成功,函数返回true,否则返回false并且将错误码置1,该错误码可以通过调用 error() 方法获得。

注意: 若串口可以成功打开但不能成功设置串口参数时,该函数返回false。在这种情况下,串口会自动关闭,从而避免串口设置错误。

警告: 该函数的参数 mode 只能是 QIODevice::ReadOnly, QIODevice::WriteOnly,或 QIODevice::ReadWrite.

另请参阅 QIODevice::OpenMode and setPort().

QSerialPort::PinoutSignals QSerialPort::pinoutSignals()


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

您可以通过把该函数的返回值和一个模板做逻辑与运算来配置串口信号线的状态。这个模板是QSerialPort::PinoutSignals 的期望枚举值。

注意: 该函数执行系统调用以确保串口能正常返回信号线状态。这一点是非常必要的,尤其是当底层操作系统不能提供关于串口信号线状态的通知时。

注意: 执行该函数之前,串口必须是打开的,否则函数返回 NoSignal 并且将 NotOpenError 错误码置1

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) 的重写函数。

bool QSerialPort::sendBreak(int duration = 0)


若在串口异步通信中使用停止位,在 duration 毫秒的时间内连续发送值为0的比特流。若发送成功,函数返回true,否则返回false

若函数参数 duration 的值为0,那么值为0的比特流至少发送0.25秒,但不超过0.5秒。

若函数参数 duration 的值不等于0,那么传输值为0的比特流的时间长度取决于具体实现。

注意: 执行该函数之前,串口必须是打开的,否则函数返回 NoSignal 并且将 NotOpenError 错误码置1

另请参阅 setBreakEnabled().

void QSerialPort::setPort(const QSerialPortInfo &serialPortInfo)


该函数用于设置串口,串口参数在 serialPortInfo 类实例中。

另请参阅 portName() 和 QSerialPortInfo.

void QSerialPort::setPortName(const QString &name)


设置串口名。

串口名字既可以用简略版的名字也可以用包好系统设备地址的全名。

另请参阅 portName() 和 QSerialPortInfo.

void QSerialPort::setReadBufferSize(qint64 size)


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

如果 size 不为0,那么串口读缓冲区不会超过 size 字节。如果 size0,那么串口读缓冲区没有大小限制,所有读入串口的数据都将被缓存。 size 的默认值为0

该函数在一些情况下非常有用,比如仅需要在特定时间读串口(例如实时流应用)或者需要防止串口读入太多数据从而造成内存耗尽的情形。

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

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


该函数是QIODevice::waitForBytesWritten(int msecs) 的重写函数。

该函数会阻塞串口通信线程直至最后一个字节写入到串口并且触发了 bytesWritten() 信号。函数经过 msecs 毫秒后超时, msecs 的默认值是30000毫秒,如果 msecs 的值为-1,那么该函数不会超时。

如果成功触发 bytesWritten() 信号,函数将返回true,否则返回false(写串口过程中出错或者操作超时)。

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


该函数是 QIODevice::waitForReadyRead(int msecs) 的重写函数。

该函数会阻塞串口通信线程直至新数据已经准备好读入串口并且触发了 readyRead() 信号。函数经过 msecs 毫秒后超时, 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) 的重写函数。