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等
,这是有效的答案 0 :(得分:3)
假设以前没有使用QDataStream创建msnLogFile(如果是,则完全忽略此答案),您不想使用>>运营商。
原因是当QDataStream正在写字符串时,它会将字符串的长度预先设置为输出字节。这允许另一个QDataStream以正确的长度读回来并获得相同的结果。因此,为什么int,qint8等正常工作;没有前置大小,它只是原始数据。
如果msnLogFile的内容是严格文本,则需要传递QIODevice::Text标志才能打开并使用QIODevice::readLine()或QIODevice::readAll(),但如果是二进制数据,则必须使用QDataStream::readRawData()并以正确的顺序以正确的顺序读取数据。
答案 1 :(得分:1)
我冒昧地猜测是因为你没有指定协议版本。您应该调用setVersion()
以确保可能使用不同版本的Qt的多台计算机都使用相同的协议版本。