2016-03-29 1 views
0

J'ai un problème lors de la réception d'octets de RS232 dans QByteArray. J'ai connecté le signal readyread() pour appeler ma méthode serialport et à l'intérieur je lis les octets avec readAll() à un QByteArray. Chaque fois que des données sont disponibles, il réécrit QByteArray, mais je veux tout recevoir, puis utiliser les données, mais maintenant je ne peux pas parce que c'est en parties. Que faire?QSerialPort readyread() SIGNAL

Répondre

1

Ajoutez simplement à la matrice. Vous aurez également besoin d'un critère pour déterminer quand vous avez reçu toutes les données que vous souhaitiez. Cela peut être, par exemple. un nombre donné d'octets:

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