2012-05-04 22 views
0

我目前正在編寫播放播客的應用程序。我將其中的所有資訊提供和劇集都表示爲QStandardItemQStandardItemModel中的對象。目前,我沒有辦法保存這個模型 - 當應用程序關閉時,feed模型會冒煙。我看着使用QSettings,但只適用於QVariant下的數據類型。如何保存QStandardItemModel?

看着this post給了我一些希望,但我認爲我做錯了什麼。我的應用程序的構造函數中有以下代碼。

//Expand QVatiant to use QStandardItemModel 
qRegisterMetaType<QStandardItemModel>("QStandardItemModel"); 

然而,這在編譯時給了我這個錯誤。

/ [...] QtSDK/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Versions/4/Headers/qstandarditemmodel.h:424: error: 'QStandardItemModel::QStandardItemModel(const QStandardItemModel&)' is private 

啊。這讓我想起QMetaType的Qt文檔中的這個警告,here

任何具有公共默認構造函數,公共副本構造函數和公共析構函數的類或結構都可以註冊。

那麼,我該從哪裏出發呢? Qt的行爲完全按照它的樣子,所以這種方法是行不通的。我正在考慮將模型保存爲xml文件,但這似乎是一個很大的努力。這似乎是一個很常見的問題 - 我只是不知道在哪裏尋找答案。

+0

看起來沒有好的方法來做到這一點......我可能不得不將這個序列化成一個文件。我會跟進我自己的解決方案。 –

+0

據我所知,你需要從QStandardItemModel派生一個類並實現一個公共的複製構造函數。 –

回答

0

下面是我可以想到的最佳解決方案:創建一種將模型保存到XML文檔中的方法,並在我更改模型(例如添加或刪除播客)時調用它。我手邊沒有實際的源代碼,但由於沒有真正簡單的方法來批量保存數據結構,所以這是最好的解決方案。