0

I'm currently writing an application that plays podcasts. I'm representing all the feeds and the episodes within them as QStandardItem objects within a QStandardItemModel. Right now, I don't have a way to save this model--when the application closes, the feed model goes up in smoke. I looked at using QSettings, but that only works for datatypes that fall under QVariant.

Looking at this post gave me some hope, but I think I'm doing something wrong. I've got the following code in the constructor for my application.

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

That, however, gives me this error at compile time.

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

Ah. That reminds me of this caveat from the Qt documentation for QMetaType, here.

Any class or struct that has a public default constructor, a public copy constructor and a public destructor can be registered.

So, where do I go from here? Qt is behaving exactly as it should, so this approach won't work. I'm thinking of saving off the model as an xml file, but that seems like a ton of effort. This seems like a pretty common problem--I just don't know where to look for the answer.

Community
  • 1
  • 1
Vishal Kotcherlakota
  • 1,134
  • 4
  • 13
  • 36

1 Answers1

0

Here's the best solution I could come up with: Create a method that saves the model into an XML document, and call it whenever I change the model (e.g. add or remove a podcast). I don't have the actual source code on hand, but since there's no real easy way to save the data structure wholesale, this is the best solution.

Vishal Kotcherlakota
  • 1,134
  • 4
  • 13
  • 36