Unsolved canReadLine QIODevice
-
Hello,
I'm trying to implement a serial connection with QIODevice (SerialPort). I would like to parse line by line (each line consists of multiple columns of data) and for this I found canReadLine().
But as I understand I have to use startTransaction, because otherwise the buffer will not be used. I'm I correct?bool QIODevice::canReadLine() const { Q_D(const QIODevice); return d->buffer.indexOf('\n', d->buffer.size(), d->isSequential() ? d->transactionPos : Q_INT64_C(0)) >= 0; }
So to read a full line, I have to open a QSerialPort and then start a Transaction. Then I have to wait a little bit (till data is in the buffer) and then I can use canReadLine. Am I correct? Is there a better way instead to wait a little bit? Or is it the wrong way to go?
-
Hi,
Why not use QSerialPort, cumulate arrived data in a QByteArrsy and then apply the line check to the cumulated data ?
-
I'm using QSerialPort. But then I have to implement a ringbuffer my self to parse always complete lines
-
What are problem in this approach?
Foo::onReadyRead() { while (m_serial->canReadLine()) { const QByteArray line = m_serial->readLine(); } }
-
And otherwise I return without doing something and wait for the next onReadyRead signal?
I will try it out