QSerialPort readyread()SIGNAL

时间:2016-03-29 17:07:54

标签: c++ qt serial-port qtserialport

在QByteArray中从RS232接收字节时出现问题。我连接readyread()信号来调用我的serialport方法,在里面我用readAll()读取字节到QByteArray。只要数据可用,它就会重写QByteArray,但我希望全部接收它,然后使用数据,但现在我不能,因为它是部分的。怎么办?

1 个答案:

答案 0 :(得分:2)

只需附加到数组即可。您还需要一些标准来确定何时收到您希望的所有数据。这可以是,例如,给定的字节数:

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;
      }
    });
  ...
};