QFile msnLogFile(item->data(Qt::UserRole).toString());
 QDataStream logDataStream;
    if(msnLogFile.exists()){
        msnLogFile.open(QIODevice::ReadOnly);
        logDataStream.setDevice(&msnLogFile);
        QByteArray logBlock;
        logDataStream >> logBlock;
    }

此代码不起作用。结果的QByte为空。如果我使用char *,也是一样。奇怪的是,相同的代码可以在另一个程序中工作。我想找出两者之间的区别。如果我使用int,uint,quint8等,则可以使用

最佳答案

假定以前未使用QDataStream创建msnLogFile(如果已创建,则完全忽略此答案),则您不想使用>>运算符。

原因是当QDataStream写入字符串时,它将字符串的长度添加到输出字节中。这允许另一个QDataStream以正确的长度读回它并获得相同的结果。因此,为什么int,qint8等可以正常工作?没有前置大小,仅是原始数据。

如果msnLogFile的内容严格为文本,则需要传递QIODevice::Text标志以打开并使用QIODevice::readLine()QIODevice::readAll(),但是,如果它是二进制数据,则必须使用QDataStream::readRawData()并以正确的顺序以正确的大小读取数据。

关于c++ - QDataStream和QDataStream::operator >>(char *&s)问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2693451/

10-08 23:19