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等命令,这将起作用
发布于 2010-04-23 04:28:33
假设msnLogFile之前不是使用QDataStream创建的(如果是,则完全忽略此答案),您不希望使用>>运算符。
这是因为当QDataStream编写字符串时,它会将字符串的长度预置到输出字节中。这允许另一个QDataStream以正确的长度读回它,并获得相同的结果。因此,为什么int、qint8等可以正常工作;没有预置大小,它只是原始数据。
如果msnLogFile的内容是严格的文本,则需要传递QIODevice::Text标志来打开并使用QIODevice::readLine()或QIODevice::readAll(),但是如果是二进制数据,则必须使用QDataStream::readRawData()并以正确的顺序和正确的大小读出数据。
发布于 2010-04-23 03:54:59
我大胆地猜测这是因为您没有指定协议版本。您应该调用setVersion()以确保可能使用不同版本的Qt的多台计算机都使用相同的协议版本。
https://stackoverflow.com/questions/2693451
复制相似问题