0
我試圖按照教程here並序列化Qt對象。這裏是我的代碼:QDataStream無法序列化數據
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 Creator 3.1.1
基於Qt 5.2.1
。
瞧,加入'close()'工作!但爲什麼我需要這個!在C++中,當變量關閉時文件句柄會自動關閉,不是嗎? – SexyBeast 2014-11-20 17:34:55
查看QFile的Qt源代碼,它確實調用close,它會刷新流。可能是因爲QDataStream在有時間完成流式傳輸到文件之前被刪除。 – TheDarkKnight 2014-11-21 08:59:49
是的,那是可能的。不管怎麼說,還是要謝謝你! :) – SexyBeast 2014-11-21 09:34:19