c++ - QSerialPort readyread() 信号

标签 c++ qt serial-port qtserialport

我在 QByteArray 中从 RS232 接收字节时遇到问题。我连接了 readyread() 信号来调用我的串行端口方法,在其中我正在使用 readAll() 将字节读取到 QByteArray。只要数据可用,它就会重写 QByteArray,但我想接收所有数据,然后使用数据,但现在我不能,因为它是部分的。怎么办?

最佳答案

简单地附加到数组。您还需要一些标准来确定何时收到了您想要的所有数据。这可以是,例如给定的字节数:

class Communicator {
  int expect;
  QSerialPort port;
  QByteArray reply;
  void processReply() {
    ...
  }
public:
  Communicator() {
    QObject::connect(&port, &QIODevice::readyRead, [this]{
      reply += port.readAll();
      if (expect && reply.size() >= expect) {
        processReply();
        reply.clear();
        expect = 0;
      }
    });
  ...
};

关于c++ - QSerialPort readyread() 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290702/

相关文章:

c++ - 解析来自串口的完整消息

c++ - 如何通过C++程序发送Email?

c++ - 为瘦客户端设计客户端(胖)/服务器 + 额外的 REST API

c++ - 为什么不能等待 Qt 进程在静态析构函数中完成?

c++ - 将 Jenkins CI 用于 Qt 项目

c++ - 如何优化涉及大量sql查询的Qt代码块?

c++ - boost::asio 在从串行端口读取时阻塞 std::cout

c# - SerialPort.BaseStream.ReadAsync 缺少第一个字节

c++ - 函数计时器阻止 main 继续

c++ - 使用 const var& 在 C++ 中传递引用