Count number of bytes written to QDataStream in Qt5

1k Views Asked by At

In my code I am preparing some data for sending over a network using QDataStream. In the middle of the preparations I would like to know exactly how many bytes that were prepared at that point. How can I do that?

Example:

int myFunc(QDataStream &ds){
   ds << "hello"
   ds << 123;
   ds << 456.7f;
   //...
   //How can I do this:
   return ds.numberOfBytesPipedIntoThisQDataStreamAtThisTime();
}
2

There are 2 best solutions below

3
On

This could work (although it looks not very elegant).

int myFunc(QDataStream& ds){
    QBuffer buf;
    buf.open(QBuffer::WriteOnly);
    QDataStream tmpStream(&buf);

    tmpStream << "hello";
    tmpStream << 123;
    tmpStream << 456.7f;
    int written = buf.size();
    if(ds.device()->write(buf.data()) != buf.data().size()) {
        // handle error
    }
    return written;
}
1
On

Usual way to know the number of bytes:

QByteArray buf;
QDataStream stream( &buf, QIODevice::ReadWrite );
stream << someData;
int count = buf.size();