美文网首页
QT串口编程 - QSerialPort类

QT串口编程 - QSerialPort类

作者: YottaYuan | 来源:发表于2020-03-29 05:45 被阅读0次

QT串口编程 - QSerialPort类

  • 提供对串口的访问
  • 头文件:#include <QSerialPort>
  • qmake: QT += serialport
  • 最低版本: Qt5.1
  • 继承自:QIODevice

公共类型(Public Types)

类型 名称
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

属性(Properties)

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

说明

QSerialPort类提供访问串行端口的功能。
您可以使用QSerialPortInfo帮助程序类获取有关可用串行端口的信息,该类允许枚举系统中的所有串行端口。这对于获取要使用的串行端口的正确名称很有用。您可以将帮助程序类的对象作为参数传递给setPort()setPortName()方法,以分配所需的串行设备。
设置端口后,可以使用open()方法以只读(r / o),只写(w / o)或读写(r / w)模式打开它。
注意:串行端口始终以独占访问方式打开(也就是说,没有其他进程或线程可以访问已打开的串行端口)。
使用close()方法关闭端口并取消I / O操作。
成功打开后,QSerialPort会尝试确定端口的当前配置并进行初始化。您可以使用setBaudRate()setDataBits()setParity()setStopBits()setFlowControl()方法将端口重新配置为所需的设置。
有两个属性可与管脚信号一起使用,即:QSerialPort :: dataTerminalReadyQSerialPort :: 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()来查找最后发生的错误的类型。
使用阻塞串行端口进行编程与使用非阻塞串行端口进行编程完全不同。 阻塞的串行端口不需要事件循环,通常可以简化代码。 但是,在GUI应用程序中,阻塞串行端口应仅在非GUI线程中使用,以避免冻结用户界面。
有关这些方法的更多详细信息,请参见示例应用程序。
QSerialPort类也可以与QTextStream和QDataStream的流运算符(operator <<()operator >>())一起使用。 但是,有一个问题需要注意:在尝试使用operator >>()重载运算符进行读取之前,请确保有足够的数据可用。
另请参见QSerialPortInfo。

相关文章

  • QT串口编程 - QSerialPort类

    QT串口编程 - QSerialPort类 提供对串口的访问 头文件:#include qmake: QT += ...

  • Qt串口通信

    1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,...

  • Qt学习笔记(一)

    画图 qcustomplot 串口通信 Qt5以后自带QSerialPort 1 在工程文件(即.pro文件)中增...

  • Qt5学习:串口编程基础

    转载自QT开发(五十)——QT串口编程基础 一、QtSerialPort简介 (一)串口通信基础 目前使用最广泛的...

  • QT串口编程 - 终端示例(Terminal)

    QT串口编程 - 终端示例(Terminal) 终端显示了如何使用Qt串行端口为简单的串行接口创建终端。 此示例显...

  • QT串口编程 - 阻塞从机示例(Blocking Slave)

    QT串口编程 - 阻塞从机示例(Blocking Slave) Blocking Slave演示了如何在非GUI线...

  • 简述:在QT5中使用串口类

    在QT5中,我们友好的编译器亲切的为我们提供了串口类,让我们不再为简单的使用串口而发愁,这里就简单介绍一下我对串口...

  • QT5串口通信(Hex格式传输)

    参考博客: 博客园-菜头大大:QT串口通信 CSDN-宗师之路:QT实现串口通信(附源码下载) CSDN-xz-c...

  • QT入门简介(001)

    1,C++是一门通用的标准编程语言;QT是一套应用程序开发类库。 2,与MFC不同,Qt是跨平台的开发类库。Qt支...

  • QT-参考书

    《Qt Creator快速入门》《Qt5编程入门》 Qt进阶书籍推荐官方的《C++ GUI Qt4编程》

网友评论

      本文标题:QT串口编程 - QSerialPort类

      本文链接:https://www.haomeiwen.com/subject/njdqyhtx.html