我的数据是从 XML 文件加载的,而且肯定是分层的。调整数据以使用 Qt 的模型/视图框架似乎是直截了当的。但是,XML 节点不是原始对象,如数字或字符串。我喜欢显示类似于Simple Widget Mapper 示例的数据。我有一个带有一些标签的表单,一个文本字段,按钮,也许还有复选框。此外,层次视图中的项目可以被选择(例如检查复选框)、删除(关闭按钮)、编辑(编辑按钮)、拖放。拖放用于操作(插入、移动、复制)层次结构。最佳做法是什么?
到目前为止,我看到了三个选项:
将 QDataWidgetMapper 与嵌套小部件一起使用:
XML 节点的属性列在一行中。对于每个节点,一个 QDataWidgetMapper 与该行相关联。QDataWidgetMapper 将小部件字段与适当的节点值同步。所有事件、拖放、选择……都必须由小部件处理。小部件提供放置容器。嵌套的小部件表示数据层次结构。
实现自定义 QAbstractItemView,并使用委托:
我的目标是类似 Nassi-Shneiderman 图。因此,不能应用标准的 QTreeView。但是,应该可以创建一个继承 QAbstractItemView 的基本分层布局。使用自定义委托,使用表单小部件绘制 XML 数据,并创建编辑器。QAbstractItemView 负责拖放、管理选择模型、(以某种方式)侦听按钮事件以从层次结构中删除项目,并要求代理提供编辑器。
别的东西:
我离成为 Qt 大师还很遥远。我欢迎建议。
推荐哪个选项?你认为哪个选项不那么痛苦?
编辑 - 2 月 21 日:有人知道 Qt Designer 是如何实现的吗?这差不多,我要找的。与在 Qt Designer 中一样,我有元素(循环、条件、动作……),并且喜欢编辑分层过程。有些元素是容器,有些是叶子。有些元素是水平结构的,有些是垂直结构的。Qt Designer 是 QGraphicsScene 吗?
谢谢你的帮助和建议,玛丽安