这篇博客记录一下QSerialPort类的学习成果,虽然用过多次了,但是从来没有仔细查看过官方的说明,所以这篇博客主要参考QT官方文档,给自己一个明确的,详细的使用方法,或许会发现点意外收获也说不定。
QSerialPort类提供的是是一个接入串口的功能,它从QT的5.1版本之后才开始有,它继承自QIODevice。还有一个串口辅助的类QSerialPortInfo,它可以列举出系统里所有的串口,通过这个类,配合setPort和setPortName方法,我们就可以安排一下自己想用的串口了。下面是这类需要的头文件和工程文件的添加的qmake语句:
Header: |
#include |
qmake: |
QT += serialport |
官方文档上提到一个“All functions in this class are reentrant.”这个类里面所有的函数都是可重入的。这里的可重入意思是允许被递归调用的函数。这就意味着,这个类的函数正被调用尚未返回时,也可以直接或间接调用函数本身。一般的函数不能做到这样,只有重入函数才允许递归调用。
enum |
BaudRate { Baud1200, Baud2400, Baud4800, Baud9600, ..., 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, ..., SecondaryReceivedDataSignal } |
flags |
PinoutSignals |
enum |
SerialPortError { NoError, DeviceNotFoundError, PermissionError, OpenError, ..., UnknownError } |
enum |
StopBits { OneStop, OneAndHalfStop, TwoStop, UnknownStopBits } |
*1、baudRate : qint32
这是设置串口波特率的。此项设置需要在串口打开之前,否则会回设置失败,返回一个错误,这个返回的错误值可以在QSerialPort::error里面看到。设置成功,返回一个true,然后在QSerialPort::open()运行的时候自动加载配置。要是想设置波特率,那就可以通过QSerialPort::BaudRate的枚举或者直接写一个qint32类型的数据。这个波特率的默认值是9600,也就是9600bits每秒。
跟这个参数相关的函数有这两个:
qint32 |
baudRate(Directions directions = AllDirections) const |
bool |
setBaudRate(qint32 baudRate, Directions directions = AllDirections) |
相关的信号呢?
void |
baudRateChanged(qint32 baudRate, QSerialPort::Directions directions) |
*2、flowControl : FlowControl
这个是设置串口的流控的。跟波特率一样,要在打开串口之前设置。也可以在QSerialPort::error里面看到错误反馈。流控的默认配置是关闭的,默认值为NoFlowControl。
跟这个参数相关的函数有这两个:
FlowControl |
flowControl() const |
bool |
setFlowControl(FlowControl flowControl) |
相关的信号有:
void |
flowControlChanged(QSerialPort::FlowControl flow) |
*3、parity : Parity
这个参数是设置校验方式的,跟波特率一样,要在打开串口之前设置。默认是没有校验的,值是NoParity。
跟这个参数相关的函数有这两个:
Parity |
parity() const |
bool |
setParity(Parity parity) |
相关信号有:
void |
parityChanged(QSerialPort::Parity parity) |
*4、dataBits : DataBits
控制数据位的,设置方法跟波特率差不多,也是在串口打开之前设置。默认是8数据位,值是Data8。
跟这个参数相关的函数有两个:
DataBits |
dataBits() const |
bool |
setDataBits(DataBits dataBits) |
相关信号有:
void |
dataBitsChanged(QSerialPort::DataBits dataBits) |
*4、stopBits : StopBits
控制停止位的,设置方法同上。默认是1停止位,值是OneStop。
相关的函数有:
StopBits |
stopBits() const |
bool |
setStopBits(StopBits stopBits) |
相关信号有:
void |
stopBitsChanged(QSerialPort::StopBits stopBits) |
*5、breakEnabled : bool
这个参数是设置传送状态的。如果返回true,那传送线路就是切断状态,否则就是非切断状态。这个参数的设置或者查询必须在串口打开之后,如果串口没打开,设置这个参数会报NotOpenError。这个参数不常用。
相关的函数:
bool |
isBreakEnabled() const |
bool |
setBreakEnabled(bool set = true) |
相关的信号:
void |
breakEnabledChanged(bool set) |
*6、dataTerminalReady : bool
数据终端就绪的参数,会保持一个状态(高或者低)。返回值是true代表成功,false代表失败。如果标志位是true,说明DTR(dataTerminalReady)信号被设置为高了,反之说明是低。设置或者查询这个参数的前提是串口已经打开了,否则会也会报NotOpenError的错误。
相关函数:
bool |
isDataTerminalReady() |
bool |
setDataTerminalReady(bool set) |
相关信号:
void |
dataTerminalReadyChanged(bool set) |
*7、error : SerialPortError
这个参数会记录串口的错误状态。I/O设备的状态出错时会返回错误码。这个参数可以用来查找错误原因。如果clearError()函数被调用了,那么错误码就会被设置为默认状态,也就是QSerialPort::NoError。
相关的函数有:
SerialPortError |
error() const |
void |
clearError() |
*8、requestToSend : bool
请求发送的参数。这个参数跟dataTerminalReady类似,也是保持一个高或者低的状态。设置成功则返回true,否则返回false。如果标志位是true,RTS(requestToSend)就是高,反之则是低。这里注意一点:如果在HardwareControl模式下,发送RTS信号会失败,错误提示是UnsupportedOperationError,这是因为此时的信号是由驱动自动控制的。
相关的函数:
bool |
isRequestToSend() |
bool |
setRequestToSend(bool set) |
相关的信号:
void |
requestToSendChanged(bool set) |
*1、enum QSerialPort::BaudRate
下面的枚举是描述设备通信波特率的。这里只列出了一些比较常用的。
Constant |
Value |
Description |
QSerialPort::Baud1200 |
1200 |
1200 baud. |
QSerialPort::Baud2400 |
2400 |
2400 baud. |
QSerialPort::Baud4800 |
4800 |
4800 baud. |
QSerialPort::Baud9600 |
9600 |
9600 baud. |
QSerialPort::Baud19200 |
19200 |
19200 baud. |
QSerialPort::Baud38400 |
38400 |
38400 baud. |
QSerialPort::Baud57600 |
57600 |
57600 baud. |
QSerialPort::Baud115200 |
115200 |
115200 baud. |
QSerialPort::UnknownBaud |
-1 |
Unknown baud. 已经废弃,新版本不要用。 |
*2、enum QSerialPort::DataBits
下面的枚举是用来描述数据位的。
Constant |
Value |
Description |
QSerialPort::Data5 |
5 |
The number of data bits in each character is 5. It is used for Baudot code. It generally only makes sense with older equipment such as teleprinters. |
QSerialPort::Data6 |
6 |
The number of data bits in each character is 6. It is rarely used. |
QSerialPort::Data7 |
7 |
The number of data bits in each character is 7. It is used for true ASCII. It generally only makes sense with older equipment such as teleprinters. |
QSerialPort::Data8 |
8 |
The number of data bits in each character is 8. It is used for most kinds of data, as this size matches the size of a byte. It is almost universally used in newer applications. |
QSerialPort::UnknownDataBits |
-1 |
Unknown number of bits. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code. |
*3、enum QSerialPort::Direction 和 flags QSerialPort::Directions
这里的枚举代表数据传输的方向,某些操作系统里设置波特率的时候它可以区分不同方向的波特率。(像OPSIX-like)
Constant |
Value |
Description |
QSerialPort::Input |
1 |
Input direction. |
QSerialPort::Output |
2 |
Output direction. |
QSerialPort::AllDirections |
Input | Output |
Simultaneously in two directions. |
方向的类型是QFlags
*4、enum QSerialPort::FlowControl
这个枚举是对流控的描述。
Constant |
Value |
Description |
QSerialPort::NoFlowControl |
0 |
No flow control. |
QSerialPort::HardwareControl |
1 |
Hardware flow control (RTS/CTS). |
QSerialPort::SoftwareControl |
2 |
Software flow control (XON/XOFF). |
QSerialPort::UnknownFlowControl |
-1 |
Unknown flow control. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code. |
*5、enum QSerialPort::Parity
这个枚举是校验方案的描述。
Constant |
Value |
Description |
QSerialPort::NoParity |
0 |
No parity bit it sent. This is the most common parity setting. Error detection is handled by the communication protocol. |
QSerialPort::EvenParity |
2 |
The number of 1 bits in each character, including the parity bit, is always even. |
QSerialPort::OddParity |
3 |
The number of 1 bits in each character, including the parity bit, is always odd. It ensures that at least one state transition occurs in each character. |
QSerialPort::SpaceParity |
4 |
Space parity. The parity bit is sent in the space signal condition. It does not provide error detection information. |
QSerialPort::MarkParity |
5 |
Mark parity. The parity bit is always set to the mark signal condition (logical 1). It does not provide error detection information. |
QSerialPort::UnknownParity |
-1 |
Unknown parity. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code. |
*6、enum QSerialPort::PinoutSignal 和 flags QSerialPort::PinoutSignals
这个枚举描述了RS-232引脚输出信号的可能情况。
Constant |
Value |
Description |
QSerialPort::NoSignal |
0x00 |
No line active |
QSerialPort::TransmittedDataSignal |
0x01 |
TxD (Transmitted Data). This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code. |
QSerialPort::ReceivedDataSignal |
0x02 |
RxD (Received Data). This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code. |
QSerialPort::DataTerminalReadySignal |
0x04 |
DTR (Data Terminal Ready). |
QSerialPort::DataCarrierDetectSignal |
0x08 |
DCD (Data Carrier Detect). |
QSerialPort::DataSetReadySignal |
0x10 |
DSR (Data Set Ready). |
QSerialPort::RingIndicatorSignal |
0x20 |
RNG (Ring Indicator). |
QSerialPort::RequestToSendSignal |
0x40 |
RTS (Request To Send). |
QSerialPort::ClearToSendSignal |
0x80 |
CTS (Clear To Send). |
QSerialPort::SecondaryTransmittedDataSignal |
0x100 |
STD (Secondary Transmitted Data). |
QSerialPort::SecondaryReceivedDataSignal |
0x200 |
SRD (Secondary Received Data). |
这里的引脚输出信号类型是QFlags
*7、enum QSerialPort::SerialPortError
这个枚举描述了QSerialPort::error参数可能包含的错误情况。
Constant |
Value |
Description |
QSerialPort::NoError |
0 |
No error occurred. |
QSerialPort::DeviceNotFoundError |
1 |
An error occurred while attempting to open an non-existing device. |
QSerialPort::PermissionError |
2 |
An error occurred while attempting to open an already opened device by another process or a user not having enough permission and credentials to open. |
QSerialPort::OpenError |
3 |
An error occurred while attempting to open an already opened device in this object. |
QSerialPort::NotOpenError |
13 |
This error occurs when an operation is executed that can only be successfully performed if the device is open. This value was introduced in QtSerialPort 5.2. |
QSerialPort::ParityError |
4 |
Parity error detected by the hardware while reading data. This value is obsolete. We strongly advise against using it in new code. |
QSerialPort::FramingError |
5 |
Framing error detected by the hardware while reading data. This value is obsolete. We strongly advise against using it in new code. |
QSerialPort::BreakConditionError |
6 |
Break condition detected by the hardware on the input line. This value is obsolete. We strongly advise against using it in new code. |
QSerialPort::WriteError |
7 |
An I/O error occurred while writing the data. |
QSerialPort::ReadError |
8 |
An I/O error occurred while reading the data. |
QSerialPort::ResourceError |
9 |
An I/O error occurred when a resource becomes unavailable, e.g. when the device is unexpectedly removed from the system. |
QSerialPort::UnsupportedOperationError |
10 |
The requested device operation is not supported or prohibited by the running operating system. |
QSerialPort::TimeoutError |
12 |
A timeout error occurred. This value was introduced in QtSerialPort 5.2. |
QSerialPort::UnknownError |
11 |
An unidentified error occurred. |
*8、enum QSerialPort::StopBits
这个枚举描述的是停止位的数量。
Constant |
Value |
Description |
QSerialPort::OneStop |
1 |
1 stop bit. |
QSerialPort::OneAndHalfStop |
3 |
1.5 stop bits. This is only for the Windows platform. |
QSerialPort::TwoStop |
2 |
2 stop bits. |
QSerialPort::UnknownStopBits |
-1 |
Unknown number of stop bits. This value is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code. |