2016-03-29 5 views
0

QByteArrayでRS232からバイトを受け取るときに問題があります。私はシリアルポートメソッドを呼び出すためにreadyread()シグナルを接続し、内部ではQByteArrayへのreadAll()でバイトを読み込んでいます。データが利用可能なときはいつでも、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; 
     } 
    }); 
    ... 
}; 
関連する問題