2012-05-04 26 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文档中的方法,并在我更改模型(例如添加或删除播客)时调用它。我手边没有实际的源代码,但由于没有真正简单的方法来批量保存数据结构,所以这是最好的解决方案。