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