QDataStream&的问题QDataStream ::运营商GT;> (char *& s)

时间:2010-04-22 18:35:03

标签: c++ qt stream-operators

 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等

,这是有效的

2 个答案:

答案 0 :(得分:3)

假设以前没有使用QDataStream创建msnLogFile(如果是,则完全忽略此答案),您不想使用>>运营商。

原因是当QDataStream正在写字符串时,它会将字符串的长度预先设置为输出字节。这允许另一个QDataStream以正确的长度读回来并获得相同的结果。因此,为什么int,qint8等正常工作;没有前置大小,它只是原始数据。

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

答案 1 :(得分:1)

我冒昧地猜测是因为你没有指定协议版本。您应该调用setVersion()以确保可能使用不同版本的Qt的多台计算机都使用相同的协议版本。