我有一个QVariant,它可以包含double、QString、Foo对象或任何东西。
我想序列化我的QVariant,而不知道它包含了什么。我尝试像这样进行序列化:
QJsonObject jsonObject;
jsonObject["myObject"] = _variant.toJsonObject();我必须在Foo中重载什么函数?我必须使用Q_PROPERTY吗
发布于 2014-11-27 00:45:55
我不相信你可以直接做你想做的事情。除非手动读取和写入Foo对象的相应字段,否则无法将像Foo这样的任意对象转换为QJsonObject。由于QVariant无法知道您的对象是否支持该功能,因此您将无法直接使用QVariant。遵循Qt提供的序列化示例可能会对您有所帮助:
http://doc.qt.io/qt-5/qtcore-json-savegame-example.html
请注意,它们为Game对象提供了手动的read和write方法。
发布于 2014-11-27 01:11:29
根据this的说法,您应该能够将任何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;
}https://stackoverflow.com/questions/27154014
复制相似问题