此类继承自 QIODevice,提供访问串口的功能。
串口总是以独占方式打开(即没有其他进程或线程可以访问已经打开的串口)。
可以使用 read() 或 write() 方法读取端口数据,也可以调用 readLine() 和 readAll() 便捷方法。
如果不是一次读取所有数据,则剩余数据将在以后可用,因为新的传入数据将附加到的内部读取缓冲区。
QSerialPort 提供了一组函数,这些函数可以暂停调用线程,直到发出某些信号。这些函数可用于实现阻塞串口:
如果 waitForReadyRead() 返回 false,则连接已关闭或发生错误。
使用阻塞串口进行编程与使用非阻塞串口进行编程完全不同。阻塞的串行端口不需要事件循环,通常会导致更简单的代码。但是,在 GUI 应用程序中,阻塞串行端口只能在非 GUI 线程中使用,以避免冻结用户界面。
1、enum QSerialPort::BaudRate:通信设备最常见的标准波特率。
2、enum QSerialPort::DataBits:使用的数据位数。
3、enum QSerialPort::Direction:此枚举描述了数据传输的可能方向。用于在某些操作系统上为每个方向单独设置设备的波特率。
4、enum QSerialPort::FlowControl:此枚举描述了使用的流控制。
5、enum QSerialPort::Parity:此枚举描述了使用的奇偶校验方案。
例如:需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方。
6、enum QSerialPort::PinoutSignal:此枚举描述了可能的 RS-232 引脚分配信号。
7、enum QSerialPort::SerialPortError:此枚举描述了 error 属性可能包含的错误。
8、enum QSerialPort::StopBits:此枚举描述了使用的停止位的数量。
1、baudRate : qint32
波特率。默认值为 Baud9600,即每秒 9600 位。
2、breakEnabled : bool
传输是否处于中断状态。此属性支持 QProperty 绑定。
在尝试设置或获取此属性之前,必须打开串口,否则返回 false 并设置 NotOpenError 错误代码。
3、dataBits : DataBits
帧中的数据位。此属性支持 QProperty 绑定。默认值为 Data8。
4、dataTerminalReady : bool
线路信号 DTR 的状态(高或低),设置为 true 表示 DTR 信号设置为高
在尝试设置或获取此属性之前,必须打开串口,否则返回 false 并将错误代码设置为 NotOpenError。
5、【只读】error : SerialPortError
串口的错误状态。此属性支持 QProperty 绑定。
调用 clearError() 后,错误代码设置为默认的 NoError。
6、flowControl : FlowControl
流控制模式。此属性支持 QProperty 绑定。默认值为 NoFlowControl。
7、parity : Parity
奇偶校验模式。此属性支持 QProperty 绑定。默认值为 NoParity。
8、requestToSend : bool
线路信号 RTS 的状态(高或低),设置为 true 表示 RTS 信号设置为高。
尝试在 HardwareControl 模式下控制 RTS 信号将失败,错误代码设置为 UnsupportedOperationError,因为该信号由驱动程序自动控制。
9、stopBits : StopBits
一帧中的停止位数。此属性支持 QProperty 绑定。默认值为 OneStop。
1、bool clear(QSerialPort::Directions directions = AllDirections)
根据给定的方向,丢弃输出或输入缓冲区中的所有字符。这包括清除内部类缓冲区和 UART(驱动程序)缓冲区。同时终止挂起的读取或写入操作。返回是否成功。
2、bool flush()
将尽可能多的数据从内部写入缓冲区写入底层串行端口,而不会阻塞。如果写入了任何数据,此函数将返回true,否则返回false。
调用此函数将缓冲数据立即发送到串行端口。成功写入的字节数取决于操作系统。在大多数情况下,不需要调用此函数,因为一旦控件返回到事件循环,QSerialPort类将自动开始发送数据。如果没有事件循环,应改用 waitForBytesWritten()。
3、QSerialPort::PinoutSignals pinoutSignals()
返回线路信号的状态。此方法执行系统调用,从而确保正确返回线路信号状态。当底层操作系统无法提供有关更改的适当通知时此方法有用。
4、void setReadBufferSize(qint64 size)
设置内部读取缓冲区的大小,单位是字节。
如果缓冲区大小被限制在某个大小,QSerialPort 将不会缓冲超过这个大小的数据。
缓冲区大小为 0 的特殊情况意味着读取缓冲区是无限的,并且所有传入的数据都被缓冲。这是默认设置。
此类提供有关现有串行端口的信息。
- QList
list = QSerialPortInfo::availablePorts();//系统上可用串行端口的列表 - for(const auto & info : list)
- {
- if(!info.isNull())
- {
- qDebug()<<"串口名称:"<
portName(); - qDebug()<<"串口系统位置:"<
systemLocation(); - qDebug()<<"串口描述信息:"<
description(); - qDebug()<<"串口制造商:"<
manufacturer(); - qDebug()<<"串口序列号:"<
serialNumber(); - if(info.hasProductIdentifier())
- qDebug()<<"串口的产品编号:"<
productIdentifier(); - if(info.hasVendorIdentifier())
- qDebug()<<"串口的供应商编号:"<
vendorIdentifier(); -
- qDebug()<<"--------------";
- }
- }
- QList
list1 = QSerialPortInfo::standardBaudRates(); - qDebug()<<"平台支持的可用标准波特率列表:"<