Я читаю информацию из последовательного порта. Как ждать появления новой строки, а затем обрабатывать данные? То есть, как я могу убедиться, что я цепляю целую строку за раз.Qt QSerialPort буферизация
Этот код не работает:
void MainWindow::readData()
{
QByteArray data = serial->readAll(); //reads in one character at a time (or maybe more)
console->putData(data);
charBuffer.append(data);
if (data.contains("\n")) //read into a structure until newline received.
{
//call parsedata
sensorValues->parseData(charBuffer); //send the data to be parsed.
//empty out the structure
charBuffer = "";
}
}
Скажем, последовательный порт посылает "SENSOR1 200 \ п".
данные могут содержать следующее: «Se», затем «n», «sor 2» «00 \ n» и т. Д.
Как заблокировать вызов parseData до тех пор, пока у меня не будет строки текста?
Дополнительная информация:
readData устанавливается как слот:
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
Это не (почти), что делает ваш код? Помимо того, что если вы получаете «200 \ nSensor5» в одном вызове readData(), часть «Sensor5» будет передана parseData как часть предыдущей строки и не будет включена в начало следующей строки, отправленной в parseData – Pete
, когда вы говорите «этот код не работает», какой результат вы получаете? – Pete
Я получаю смешанный выход выше. Решение найдено: block on canReadLine(); – Dirk