2016-03-29 7 views
0

У меня проблема при получении байтов из RS232 в QByteArray. Я подключил сигнал readread() для вызова метода serialport и внутри него. Я читаю байты с readAll() в QByteArray. Всякий раз, когда данные доступны, он перезаписывает QByteArray, но я хочу получить его все, а затем использовать данные, но теперь я не могу, потому что это по частям. Что делать?QSerialPort readyread() SIGNAL

ответ

1

Просто добавьте в массив. Вам также потребуется определенный критерий, чтобы определить, когда вы получили все данные, которые вы пожелаете. Это может быть, например, заданное количество байтов:

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