QDataStream 无法序列化数据
Posted
技术标签:
【中文标题】QDataStream 无法序列化数据【英文标题】:QDataStream unable to serialize data 【发布时间】:2014-11-20 17:09:56 【问题描述】:我正在尝试遵循教程here 并序列化 Qt 对象。这是我的代码:
QFile file("/Users/kaustav/Desktop/boo.dat");
if (!file.open(QIODevice::WriteOnly))
qDebug() << "Cannot open file for writing: "
<< qPrintable(file.errorString()) << endl; //no error message gets printed
return 0;
QDataStream out(&file); // we will serialize the data into the file
out.setVersion(QDataStream::Qt_5_3); //adding this makes no difference
out << QString("the answer is"); // serialize a string
out << (qint32)42;
当我运行这个程序时,文件会在我的桌面上创建,但是它的大小是 0 kB,它是空白的。当然,当我尝试这个时:
QFile file("/Users/kaustav/Desktop/boo.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); // read the data serialized from the file
in.setVersion(QDataStream::Qt_5_3);
QString str;
qint32 w;
in >> str >> w;
我在str
中得到一个空白字符串。我究竟做错了什么?如果有任何帮助,我正在使用基于Qt 5.2.1
的Qt Creator 3.1.1
。
【问题讨论】:
【参考方案1】:检查调用 open 时是否返回任何错误,并确保在完成后使用 file.close() 关闭文件。
当您使用 Qt 5 时,您应该在保存数据时真正使用 QSaveFile。
【讨论】:
瞧,添加close()
有效!但我为什么需要那个!在 C++ 中,当变量关闭时,文件句柄会自动关闭,不是吗?
查看 QFile 的 Qt 源代码,它确实调用了 close,它确实刷新了流。可能是 QDataStream 在完成流式传输到文件之前被删除。
是的,这是可能的。不管怎么说,还是要谢谢你! :)以上是关于QDataStream 无法序列化数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 QDataStream 在 Python 中打开 bin 文件