在Qt中,QSerialPort::write(data) 和 readAll() 有什么关联和联系

在Qt中,QSerialPort::write(data)readAll() 是与串行通信相关的两个不同的函数,它们属于 QSerialPort 类。这两个函数在串行通信中扮演不同的角色,但它们之间存在一定的联系:

QSerialPort::write(data)

  • 这个函数用于将数据发送到串行端口。它接受一个 QByteArray 类型的数据参数,并将这些数据写入串行端口的发送缓冲区。
  • write() 函数本身不保证数据立即发送到外部设备,而是将数据放入缓冲区,等待串行端口硬件或驱动程序将其发送出去。
  • 函数原型:
    qint64 write(const QByteArray &data);
    
  • 返回值是实际写入的字节数。

readAll()

  • 这个函数用于从串行端口的接收缓冲区读取所有可用的数据,并将其作为 QByteArray 返回。
  • readAll() 会阻塞调用线程,直到缓冲区中的数据被完全读取,或者遇到超时(如果有设置超时)。
  • 函数原型:
    QByteArray readAll();
    

联系

  • 数据流向write() 函数负责发送数据,而 readAll() 负责接收数据。在串行通信中,数据从发送方的发送缓冲区通过串行端口发送出去,然后在接收方的串行端口接收缓冲区中被读取。
  • 缓冲区操作write() 操作的是发送缓冲区,而 readAll() 操作的是接收缓冲区。这两个缓冲区是串行通信中数据传输的临时存储区域。
  • 通信对等:在一个完整的串行通信过程中,发送方使用 write() 发送数据,接收方使用 readAll() 或其他读取函数来接收数据。这两个操作共同完成了数据的发送和接收过程。

示例

QSerialPort serialPort;
serialPort.setPortName("/dev/ttyS0"); // 设置串行端口名称
serialPort.setBaudRate(QSerialPort::Baud9600); // 设置波特率
serialPort.open(QIODevice::ReadWrite); // 打开串行端口

if (serialPort.isOpen()) {
    // 发送数据
    QByteArray dataToSend = "Hello, Serial Port!";
    qint64 bytesWritten = serialPort.write(dataToSend);
    qDebug() << "Bytes written:" << bytesWritten;

    // 接收数据
    QByteArray dataReceived = serialPort.readAll();
    qDebug() << "Data received:" << dataReceived;

    serialPort.close(); // 关闭串行端口
}

在这个示例中,我们首先打开串行端口,然后使用 write() 发送数据,接着使用 readAll() 接收数据。这两个函数协同工作,实现了串行端口的基本通信功能。

相关推荐

最近更新

  1. 配置 VSCode C++ 调试时, 常见错误教程

    2024-06-19 02:26:01       0 阅读
  2. HarmonyOS应用开发前景及使用工具

    2024-06-19 02:26:01       1 阅读
  3. JVM的基础介绍(1)

    2024-06-19 02:26:01       1 阅读
  4. 开源项目编译harbor arm架构的包 —— 筑梦之路

    2024-06-19 02:26:01       1 阅读

热门阅读

  1. 扩展学习|风险沟通研究进展综述

    2024-06-19 02:26:01       4 阅读
  2. 利用Python调用闲鱼商品详情API接口

    2024-06-19 02:26:01       7 阅读
  3. 通义灵码使用笔记

    2024-06-19 02:26:01       9 阅读
  4. springboot redission 分布式锁

    2024-06-19 02:26:01       12 阅读
  5. win10 k8s dashboard

    2024-06-19 02:26:01       8 阅读
  6. Mybatis (plus 也适用)原生直接执行某句SQL

    2024-06-19 02:26:01       7 阅读
  7. Optional容器的使用技巧,判空处理

    2024-06-19 02:26:01       9 阅读
  8. 如何编辑和修改ROM,快速上手

    2024-06-19 02:26:01       9 阅读
  9. 使用 Redis 生成分布式唯一ID

    2024-06-19 02:26:01       7 阅读
  10. 带你学习Mybatis之ResultSetHandler结果集处理

    2024-06-19 02:26:01       7 阅读