シリアルポート (Qt では QtSerialPort/QSerialPort を使用) から読み取っているデータは、改行 '\n' で区切られ、'\r' 文字を返します。これは、解析のためにそれを調べる方法です。行の長さは非常に長い場合がありますが、各行の形式からデータを抽出するのは非常に簡単です。
//signal/slot connection on readyRead() is as follows:
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
readData() は次のように定義されます。
void MainWindow::readData()
{
//As mentioned below, which I will reiterate, I have already tried the addition of
// canReadLine():
if (serial->canReadLine()){
QByteArray data = serial->readLine();
//QByteArray allData = serial->readAll();
parseSerialBytes(data);
//console->putData(data);
//console->putData(alldata);
}
}
ただし、このQIODevice::readLine()
関数は非常に遅く、QIODevice::readAll() と比較して全周波数でデータを受信することを明確にブロックしています。
各行を解析するためreadLine()
にループする必要がないように、誰かが関数を適切に使用する方法を説明できますか? 「ターミナル」Qt ウィジェットの例を使用して、この非同期シリアルポート読み取り機能を作成しました。readAll()
QByteArray
事前に感謝します-これは、ここでまだ回答されていない一般的な問題のようです。