2014-11-20 72 views
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

回答

1

檢查調用open時是否返回任何錯誤,並確保在完成後使用file.close()關閉文件。

當你使用Qt 5時,你應該在保存數據時使用QSaveFile

+0

瞧,加入'close()'工作!但爲什麼我需要這個!在C++中,當變量關閉時文件句柄會自動關閉,不是嗎? – SexyBeast 2014-11-20 17:34:55

+0

查看QFile的Qt源代碼,它確實調用close,它會刷新流。可能是因爲QDataStream在有時間完成流式傳輸到文件之前被刪除。 – TheDarkKnight 2014-11-21 08:59:49

+0

是的,那是可能的。不管怎麼說,還是要謝謝你! :) – SexyBeast 2014-11-21 09:34:19