QSerialPort

欢迎加入QQ群:853840665,一块学习分享资料
在这里插入图片描述
PyQt5类翻译、示例学习 class-learning

描述

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

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

注意: 串行端口总是使用独占访问打开(也就是说,没有其他进程或线程可以访问已经打开的串行端口)。

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

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

有两个属性可以处理输出信号,即:QSerialPort::dataTerminalReady, QSerialPort::requestToSend。也可以使用pinoutSignals() 方法来查询当前的pinout信号集。

一旦知道端口已经准备好读写,就可以使用read()write() 方法。另外,还可以调用readLine()readAll() 便利方法。如果不是一次读取所有数据,那么剩余的数据将在以后可用,因为新的传入数据将被附加到QSerialPort的内部读取缓冲区中。可以使用setReadBufferSize() 限制读取缓冲区的大小。

QSerialPort提供一组函数,这些函数将挂起调用线程,直到发出某些信号。这些功能可以用来实现阻塞串口:

waitForReadyRead()阻塞调用,直到有新的数据可供读取。
waitForBytesWritten()阻塞调用,直到将一个有效负载的数据写到串行端口。

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

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

使用阻塞串行端口编程与使用非阻塞串行端口编程完全不同。阻塞串行端口不需要事件循环,通常会导致更简单的代码。但是,在GUI应用程序中,阻塞串口应该只在非GUI线程中使用,以避免冻结用户界面。

有关这些方法的更多信息,请参考示例应用程序。

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

Member Type

enum QSerialPort::BaudRate
本enum描述了通信设备所使用的波特率。
注:本enum只列出最常见的标准波特率。

ConstantValueDescription
QSerialPort::Baud120012001200 baud.
QSerialPort::Baud240024002400 baud.
QSerialPort::Baud480048004800 baud.
QSerialPort::Baud960096009600 baud.
QSerialPort::Baud192001920019200 baud.
QSerialPort::Baud384003840038400 baud.
QSerialPort::Baud576005760057600 baud.
QSerialPort::Baud115200115200115200 baud.
QSerialPort::UnknownBaud-1未知的波特。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。

enum QSerialPort::DataBits
这个枚举描述所使用的数据位的位数。

ConstantValue描述
QSerialPort::Data55每个字符的数据位的数量是5。它用于Baudot代码。它通常只适用于较老的设备,如电报机。
QSerialPort::Data66每个字符的数据位的数量是6。它很少被使用。
QSerialPort::Data77每个字符的数据位的数量是7。它用于真正的ASCII。它通常只适用于较老的设备,如电报机。
QSerialPort::Data88每个字符中的数据位数为8。它用于大多数类型的数据,因为这个大小与字节的大小匹配。它几乎被普遍应用于新的应用程序中。
QSerialPort::UnknownDataBits-1位数未知。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。

enum QSerialPort::Direction
flags QSerialPort::Directions

这个枚举描述了数据传输的可能方向。
注意:此枚举用于在某些操作系统(例如,类posix)上分别为每个方向设置设备的波特率。现在一般用不到

ConstantValueDescription
QSerialPort::Input1输入方向
QSerialPort::Output2输出方向
QSerialPort::AllDirections输入和输出模拟两个方向

Directions类型是QFlags的类型定义。它存储一个或多个方向值的组合。

enum QSerialPort::FlowControl
此枚举描述所使用的流控制。

ConstantValueDescription
QSerialPort::NoFlowControl0无流控
QSerialPort::HardwareControl1硬件流控(RTS/CTS).
QSerialPort::SoftwareControl2软件流控(XON/XOFF).
QSerialPort::UnknownFlowControl-1未知的流控制。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。

enum QSerialPort::Parity
这个枚举描述了所使用的奇偶校验方案。

ConstantValueDescription
QSerialPort::NoParity0没有奇偶校验位发送。这是最常见的奇偶校验设置。错误检测由通信协议处理。
QSerialPort::EvenParity2如果字符数据位中"1"的数目是偶数,则校验位应为"0",如果是奇数则为"1"。(校验位调整个数)
QSerialPort::OddParity3如果字符数据位中"1"的数目是偶数,校验位为"1",如果"1"的数目是奇数,校验位应为"0"。(校验位调整个数)
QSerialPort::SpaceParity4校验位始终为0
QSerialPort::MarkParity5校验位始终为1
QSerialPort::UnknownParity-1未知的平价。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。

enum QSerialPort::PinoutSignal
flags QSerialPort::PinoutSignals

这个枚举描述了可能的RS-232输出信号。

ConstantValueDescription
QSerialPort::NoSignal0x00没有线活动
QSerialPort::TransmittedDataSignal0x01TxD(传输数据)。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。
QSerialPort::ReceivedDataSignal0x02RxD(接收的数据)。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。
QSerialPort::DataTerminalReadySignal0x04数据终端就绪。
QSerialPort::DataCarrierDetectSignal0x08数据载波检测。
QSerialPort::DataSetReadySignal0x10DSR(数据集就绪)。
QSerialPort::RingIndicatorSignal0x20RNG(环指标)。
QSerialPort::RequestToSendSignal0x40RTS(请求发送)。
QSerialPort::ClearToSendSignal0x80CTS (Clear To Send).
QSerialPort::SecondaryTransmittedDataSignal0x100STD(二级传输数据)。
QSerialPort::SecondaryReceivedDataSignal0x200STD(二级接收数据)。

PinoutSignals类型是QFlags的类型定义。它存储PinoutSignal值的一个或多个组合。
enum QSerialPort::SerialPortError
该enum描述QSerialPort::error属性可能包含的错误。

ConstantValueDescription
QSerialPort::NoError0没有错误发生
QSerialPort::DeviceNotFoundError1试图打开不存在的设备时出错。
QSerialPort::PermissionError2试图打开另一个进程已经打开的设备时发生错误或没有足够权限和凭据的用户。
QSerialPort::OpenError3试图打开此对象中已打开的设备时出错。
QSerialPort::NotOpenError13此错误发生在执行只能在设备打开时才能成功执行的操作时。这个值是在QtSerialPort 5.2中引入的。
QSerialPort::ParityError4读数据时硬件检测到的奇偶校验错误。这个值已经过时了。我们强烈建议不要在新代码中使用它。
QSerialPort::FramingError5读数据时硬件检测到的帧错误。这个值已经过时了。我们强烈建议不要在新代码中使用它
QSerialPort::BreakConditionError6硬件在输入线上检测到的中断情况。这个值已经过时了。我们强烈建议不要在新代码中使用它。
QSerialPort::WriteError7写入数据时发生I/O错误。
QSerialPort::ReadError8读取数据时发生I/O错误。
QSerialPort::ResourceError9当资源不可用时,例如设备意外地从系统中删除时,就会发生I/O错误。
QSerialPort::UnsupportedOperationError10正在运行的操作系统不支持或禁止所请求的设备操作。
QSerialPort::TimeoutError12出现超时错误。这个值是在QtSerialPort 5.2中引入的。
QSerialPort::UnknownError11发生了一个未知的错误。

enum QSerialPort::StopBits
这个枚举描述所使用的停止位的数目。

恒定描述
QSerialPort:: onestop11停止位。
QSerialPort::OneAndHalfStop31.5停止位。这仅适用于Windows平台。
QSerialPort::TwoStop22停止位。
QSerialPort::UnknownStopBits-1未知的停止位的数目。这个值已经过时了。提供它是为了保持旧的源代码工作。我们强烈建议不要在新代码中使用它。

Properties

baudRate : qint32
此属性保存所需方向的数据波特率。

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

注意: 如果设置是在打开端口之前设置的,那么实际的串口设置是在端口打开成功之后,在QSerialPort::open()方法中自动完成的。

警告: 所有平台都支持设置AllDirections标志。Windows只支持这种模式。

警告: 返回相等的波特率在任何方向上的窗口。
默认值是Baud9600,即每秒9600位。

breakEnabled : bool
此属性保存处于断开状态的传输线的状态。
成功返回true,否则返回false。如果该标志为真,则传输线处于断开状态;否则为非中断状态。
注意: 在设置或获取此属性之前,串口必须打开;否则返回false并设置NotOpenError错误代码。与类的常规Qt属性设置相比,这有点不寻常。但是,这是一个特殊的用例,因为属性是通过与内核和硬件的交互设置的。因此,这两种情况不能完全相互比较。
这个属性是在Qt 5.5中引入的。
dataBits : DataBits
此属性保存帧中的数据位。
如果设置成功或在打开端口之前设置,则返回true;否则返回false并设置一个错误代码,该代码可以通过访问QSerialPort::error属性的值来获得。
注意: 如果设置是在打开端口之前设置的,那么实际的串口设置是在端口打开成功之后,在QSerialPort::open()方法中自动完成的。
默认值是Data8,即8位数据。
dataTerminalReady : bool
此属性保存行信号DTR的状态(高或低)。
成功返回true,否则返回false。如果标志为真,则DTR信号设置为高;否则低。

注意: 在设置或获取此属性之前,串口必须打开;否则返回false并将错误代码设置为NotOpenError。
error : SerialPortError
此属性保存串口的错误状态。

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

调用clearError()后,错误代码被设置为默认的QSerialPort::NoError
flowControl : FlowControl
此属性保存所需的流控制模式。

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

注意: 如果设置是在打开端口之前设置的,那么实际的串口设置是在端口打开成功之后,在QSerialPort::open()方法中自动完成的。

默认值是NoFlowControl,即没有流控制。
parity : Parity
此属性保存奇偶校验模式。

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

注意: 如果设置是在打开端口之前设置的,那么实际的串口设置是在端口打开成功之后,在QSerialPort::open()方法中自动完成的。

默认值是NoParity,即没有奇偶校验。
requestToSend : bool
此属性保存线路信号RTS的状态(高或低)。
成功返回true,否则返回false。如果旗标为真,则RTS信号设置为高;否则低。
注意: 在设置或获取此属性之前,串口必须打开;否则返回false并将错误代码设置为NotOpenError。

注意: 在硬件控制模式下控制RTS信号的尝试将失败,错误代码设置为UnsupportedOperationError,因为信号是由驱动程序自动控制的。
stopBits : StopBits
此属性保存帧中的停止位的数目。

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

注意: 如果设置是在打开端口之前设置的,那么实际的串口设置是在端口打开成功之后,在QSerialPort::open()方法中自动完成的。

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

Public Functions

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

用给定的父对象构造一个新的串行端口对象,以用指定的助手类serialPortInfo表示串行端口。

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

用给定的父对象构造一个新的串行端口对象,以表示具有指定名称的串行端口。
名称应具有特定的格式;参见**setPort()**方法。

QSerialPort(QObject *parent = nullptr)

用给定的父对象构造一个新的串口对象。

virtual ~QSerialPort()

如果需要,关闭串口,然后销毁对象。

qint32 baudRate(QSerialPort::Directions directions = AllDirections) const

见属性

bool clear(QSerialPort::Directions directions = AllDirections)

根据给定的方向,从输出或输入缓冲区中丢弃所有字符。这包括清除内部类缓冲区和UART(驱动程序)缓冲区。还可以终止挂起的读或写操作。如果成功,返回true;否则返回false。

void clearError()

见属性

QSerialPort::DataBits dataBits() const

见属性

QSerialPort::SerialPortError error() const

见属性

QSerialPort::FlowControl flowControl() const

见属性

bool flush()

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

调用此函数将缓冲后的数据立即发送到串口。成功写入的字节数取决于操作系统。在大多数情况下,不需要调用这个函数,因为一旦将控件返回到事件循环,QSerialPort类将开始自动发送数据。在缺少事件循环的情况下,调用waitForBytesWritten()

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

QSerialPort::Handle handle() const

如果支持平台且串口打开,则返回本机串口句柄;否则返回1。

警告:此功能仅供专家使用;使用它的风险自负。而且,这个函数在小的Qt版本之间没有兼容性承诺。

bool isBreakEnabled() const

见属性

bool isDataTerminalReady()

见属性

bool isRequestToSend()

见属性

QSerialPort::Parity parity() const

见属性

QSerialPort::PinoutSignals pinoutSignals()

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

从这个结果中,可以通过应用掩码“AND”来分配所需信号的状态,其中掩码是QSerialPort::PinoutSignals的所需枚举值。

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

注意: 串口必须是打开的,然后再尝试获得pinout信号;否则返回NoSignal并设置NotOpenError错误代码。

QString portName() const

返回由setPort()设置的名称或传递给QSerialPort构造函数的名称。这个名称很短,即它是从设备的内部变量系统位置提取和转换的。转换算法是平台特有的:

PlatformBrief Description
Windows删除前缀“\”.\”或“//./"从系统位置返回字符串的其余部分。
Unix, BSD从系统位置删除前缀“/dev/”并返回字符串的其余部分。

qint64 readBufferSize() const

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

bool sendBreak(int duration = 0)

如果终端使用异步串行数据,则在msec中指定的时间段内发送连续的零位流。如果成功,返回true;否则返回false。
如果持续时间为零,则零比特至少传送0.25秒,但不超过0.5秒。
如果持续时间不是零,那么根据实现在一定的时间内传输零比特。

注意: 串口必须是打开之前,试图发送中断时间;否则返回false并设置NotOpenError错误代码。

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)

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

void setPortName(const QString &name)

设置串行端口的名称。
如果需要,串行端口的名称可以作为短名称传递,也可以作为长系统位置传递。

void setReadBufferSize(qint64 size)

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

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

如果数据只在特定时间点读取(例如在实时流应用程序中),或者串行端口不应该接收太多数据,否则可能最终导致应用程序耗尽内存,那么这个选项非常有用。

bool setRequestToSend(bool set)

见属性

bool setStopBits(QSerialPort::StopBits stopBits)

见属性

QSerialPort::StopBits stopBits() const

见属性

Reimplemented Public Functions

virtual bool atEnd() const override

重构:QIODevice:: atEnd()常量。
如果当前没有更多数据可供读取,则返回true;否则返回false。
这个函数最常用于在循环中从串行端口读取数据。例如:

def readyReadSlot(self)
    while !port.atEnd():
        data = port.read(100)
        ....

virtual qint64 bytesAvailable() const override

重构:QIODevice:: bytesAvailable()常量。
返回等待读取的传入字节数。

virtual qint64 bytesToWrite() const override

重构:QIODevice:: bytesToWrite()常量。
返回等待写入的字节数。这些字节是在控件返回事件循环或调用flush()时写入的。

virtual bool canReadLine() const override

重构:QIODevice:: canReadLine()常量。
如果可以从串行端口读取一行数据,则返回true;否则返回false。

virtual void close() override

重构:QIODevice:: close ()。
注意:串口必须打开后才能关闭;否则设置NotOpenError错误代码。

virtual bool isSequential() const override

重构:QIODevice:: isSequential()常量。
总是返回true。串行端口是一个顺序设备。

virtual bool open(QIODevice::OpenMode mode) override

重构:QIODevice::打开(QIODevice:: OpenMode模式)。
使用OpenMode模式打开串口,如果成功则返回true;否则返回false并设置一个错误代码,该代码可以通过调用error()方法获得。

注意: 如果成功打开端口,该方法将返回false,但是无法成功设置任何端口设置。在这种情况下,端口会自动关闭,不会留下设置不正确的端口。

virtual bool waitForBytesWritten(int msecs = 30000) override

重构:QIODevice:: waitForBytesWritten (int msecs)。
这个函数会阻塞,直到至少有一个字节被写入到串口,并且发出了byteswrite() 信号。函数超时时间为毫秒;默认超时时间为30000毫秒。如果msecs为-1,则此函数不会超时。

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

virtual bool waitForReadyRead(int msecs = 30000) override

重构 QIODevice::waitForReadyRead(int msecs).

这个函数会阻塞,直到有新的数据可供读取,并发出readyRead()信号。函数超时时间为毫秒;默认超时时间为30000毫秒。如果msecs为-1,则此函数不会超时。

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

Signals

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

这个信号是在波特率改变后发出的。新的波特率作为波特率传递,方向作为方向。
注意: baudRate属性的通知信号。

void breakEnabledChanged(bool set)

void dataBitsChanged(QSerialPort::DataBits dataBits)

这个信号是在帧中的数据位改变后发出的。帧中的新数据位作为数据库传递。
注意:dataBits属性的通知信号。

void dataTerminalReadyChanged(bool set)

此信号在线路信号DTR的状态(高或低)改变后发出。线路信号DTR的新状态(高或低)按设置传递。

void errorOccurred(QSerialPort::SerialPortError error)

这个信号是在串口出现错误时发出的。指定的错误描述发生的错误类型。

void flowControlChanged(QSerialPort::FlowControl flow)

这个信号是在流量控制模式改变后发出的。新的流量控制模式作为流量传递。

void parityChanged(QSerialPort::Parity parity)

此信号在奇偶校验模式更改后发出。新的奇偶校验模式作为奇偶校验传递。

void requestToSendChanged(bool set)

此信号在线路信号RTS的状态(高或低)改变后发出。线路信号RTS的新状态(高或低)作为set传递。

void stopBitsChanged(QSerialPort::StopBits stopBits)

此信号是在帧中的停止位的数目改变后发出的。帧中新的停止位的数目作为停止位传递。

Reimplemented Protected Functions

virtual qint64 readData(char *data, qint64 maxSize)

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

virtual qint64 readLineData(char *data, qint64 maxSize)

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

virtual qint64 writeData(const char *data, qint64 maxSize)

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

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值