c++ - 将 QGraphicsView 或 Scene 转为 XML/JSON
问题描述
我正在寻找一种简单的方法(我认为没有)将 QGraphicsView 或 QGraphicsScene 序列化为 XML 或 JSON。
我不知道我是否应该保存视图或场景。XML 或 JSON 很好,我只需要其中一个。我只想将场景保存在文件中以保存/加载它
我在其他网站上发现了一些东西,但它看起来很复杂,或者不是真的有用。
解决方案
首先,查看这个非常有用的使用 json 的教程。其次,我想我已经读到您正在使用基于模型视图的项目?
如果是这样,则应保存所有模型信息,然后有两种可能性(取决于您的设计)。假设您创建了一个模型类PlayerList
,并且正在向所有玩家展示使用PlayerListLayout
orPlayerListView
的派生类QVBoxLayout
。现在有两种可能:
在每个视图类中,您都可以直接引用模型类。好吧,您只需要使用 getter 询问模型(这些 getter 已经存在,否则您不想将信息可视化)。你不需要json文件,只要你先初始化你的模型。因此,对于
PlayerListLayout
,您需要做的就是询问该成员中的每个Player*
成员PlayerList
并呼吁PlayerLayout::read(Player* player)
所有PlayerLayout
成员PlayerListLayout
。PlayerLayout
将初始化它的新玩家参考并询问名称、大写字母等以将其可视化。在其中一个视图类中,您没有引用任何模型类。然后您必须将模型或 json 文件传递给该视图类,以便您可以(再次)获取/读取信息。这是一种不太干净的方式,我不喜欢。我碰巧正在创建要阅读的大型函数;就在那时,我发现有些事情必须改变。阅读和写作应该很容易(如果您将职责划分为多个类)。
我有一个 Monopoly 项目,我也使用了这个序列化,而且这个教程真的很有帮助。其次,我在模型类之外.json
打开了文件(因此在视图类中),您可能也需要考虑这一点。缺点是“当你想重用模型类而不是视图类时”,你必须在你的新 gui 中重新实现文件的打开和关闭。
但是,通过这种方式,您可以在整个代码中创建并行性,因为返回 true/false 将发生在主模型的视图类中(MonopolyLayout
在我的例子中),所以方法Monopoly::read(...)
都Board::read(...)
以类似的方式运行。
推荐阅读
- java - 如何在不使用 head 的情况下打印链表的元素
- java - 获取错误值
我是这个Android编程的新手。这次我想从 MySQL 数据库中获取数据经纬度。我已经将 GPS 数据从 Arduino 发送到我的 MySQL 数据库,然后我想使用 Google Map API 在我的 android 应用程序中动态显示它。
这是我的
- android - 使用 --livereload 标志运行 ionic cordova 项目错误
- python - 如何动画 3D 线图?
- javascript - Chart.Js:如何在工具提示中显示标签
- r - 如何将日期格式转换为总天数?
- graph - 了解 Neo4j 算法回写选项
- javascript - DiscordJS - 从数组中嵌入随机图像
- r - 如何循环大数据帧并计算频率?
- laravel - 如何将数据表上的链接添加到表中的数据中