0

我有一个 QVariant 可以包含 a double、 a QString、一个Foo对象或任何东西。

我想在QVariant不知道它包含什么的情况下序列化我的。我正在尝试像这样进行序列化:

QJsonObject jsonObject;
jsonObject["myObject"] = _variant.toJsonObject();

我必须重载什么功能Foo?我必须使用Q_PROPERTY吗?

4

2 回答 2

2

我不相信你可以直接做你想做的事。除了手动读取和写入对象的相应字段外,没有办法将任意对象转换Foo为 a 。由于无法知道您的对象支持该功能,因此您将无法直接使用。它可以帮助您按照 Qt 提供的示例进行序列化:QJsonObjectFooQVariantQVariant

http://doc.qt.io/qt-5/qtcore-json-savegame-example.html

请注意,他们有该对象的手册readwrite方法。Game

于 2014-11-26T16:45:55.187 回答
2

据此,应该能够将任何 QVariant 转换为 QJSonObject

现在您的问题变成了:如何将您的 Foo 类转换为 QVariant?

我建议你在 Foo 类中添加 toQVariant 和 fromQVariant 方法来封装这种行为;最方便的 QVariant 类实际上是 QVariantMap ,您可以像这样使用它来序列化您的 Foo 对象

QVariant toVariant( Foo song ) {
   QVariantMap map;
   map.insert("album", wstring2Utf8(song.album()));
   map.insert("artist", wstring2Utf8(song.artist()));
   map.insert("duration", song.duration());
   map.insert("fingerprint", wstring2Utf8(song.fingerprint()));
   map.insert("genre", wstring2Utf8(song.genre()));
   map.insert("title", wstring2Utf8(song.title()));
   map.insert("year", song.year());
   return map;
}
于 2014-11-26T17:11:28.877 回答