Qt QSerialPort

本文为Qt 5.15->Qt Serial Port->C++ Classes->QSerialPort的内容翻译,文档原文可以在网站查看:https://doc.qt.io/qt-5/qserialport.html

QSerialPort Class

QSerialPort 类提供对串行端口的访问。

该类的所有函数都是可重入的

详细说明 Detailed Description

你可以使用QSerialPortInfo辅助类获取可用串行端口的信息,QSerialPortInfo可以列举系统中的所有串行端口。这对于获取你想要使用的串口的正确名称非常有用。你可以传递辅助类的对象作为setPort()或setPortName()方法的参数来指定期望的串行设备。

在设置端口后,你可以使用open()方法以只读read-only (r/o),只写write-only (w/o),或读写read-write (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()阻塞调用直到一个有效负载数据写入串行端口。

参见下方示例:

int numRead = 0, numReadTotal = 0;
char buffer[50];

for (;;) {
    numRead  = serial.read(buffer, 50);

    // Do whatever with the array

    numReadTotal += numRead;
    if (numRead == 0 && !serial.waitForReadyRead())
        break;
}

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

无论何时发生错误,QSerialPort将会发射errorOccurred()信号。你也可以调用error()来查找最后发生的错误的类型。

提示:不是所有错误条件都在QSerialport中以独立于平台的方式处理,例如,数据帧、奇偶校验、以及中断条件错误。这些类型的错误需要由应用程序代码处理,可能要在设备描述符上使用操作系统特定的控制代码和/或解析流的字节填充。

阻塞串口编程与非阻塞串口编程完全不同。阻塞串口不需要事件循环,并通常使得代码更简单。然而,在GUI应用程序中,阻塞串口应该仅用于非GUI线程,以避免冻结用户界面。

有关这些方法的更多细节参见Qt Serial Port Examples | Qt Serial Port 5.15.10[1]

QSerialPort类还可以与QTextStreamQDataStream的流操作(operator<<()和operator>>())共同使用。有一个问题需要注意:尝试使用重载的operator>>() 操作符进行读取前确保有足够的可用数据。

参考资料

[1]

Qt Serial Port Examples | Qt Serial Port 5.15.10: https://doc.qt.io/qt-5/qtserialport-examples.html


原文始发于微信公众号(技术知识小记):Qt QSerialPort

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/184950.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!