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?


  • Lifetime Qt Champion

    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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.