首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt Json序列化

Qt Json序列化
EN

Stack Overflow用户
提问于 2014-11-27 00:18:41
回答 2查看 1.3K关注 0票数 0

我有一个QVariant,它可以包含doubleQStringFoo对象或任何东西。

我想序列化我的QVariant,而不知道它包含了什么。我尝试像这样进行序列化:

代码语言:javascript
复制
QJsonObject jsonObject;
jsonObject["myObject"] = _variant.toJsonObject();

我必须在Foo中重载什么函数?我必须使用Q_PROPERTY

EN

回答 2

Stack Overflow用户

发布于 2014-11-27 00:45:55

我不相信你可以直接做你想做的事情。除非手动读取和写入Foo对象的相应字段,否则无法将像Foo这样的任意对象转换为QJsonObject。由于QVariant无法知道您的对象是否支持该功能,因此您将无法直接使用QVariant。遵循Qt提供的序列化示例可能会对您有所帮助:

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

请注意,它们为Game对象提供了手动的readwrite方法。

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 01:11:29

根据this的说法,您应该能够将任何QVariant转换为QJSonObject

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

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

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27154014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档