QtAbstractItemModel。一起使用QtreeView和QtableView

时间:2017-01-16 17:11:16

标签: qt treeview tableview qabstractitemmodel

我的应用程序是一个工具库管理器。它有一个包含列表和工具列表的树视图。它还有一个显示工具列表的tableview。

当我点击树视图中的列表时,我想显示带有子列表的tableview。当我单击树中的单个工具时,我会切换小部件并显示该工具的编辑形式。

如何将tableview仅限制为树视图中所选节点的子节点?

我的数据模型是自定义qAbstractItemModel。

2 个答案:

答案 0 :(得分:0)

我的类似情况(不完全相同!)与你的情况相同。在分享我的经验之前,我的假设是你有一个包含构成你的列表/工具的项目的数据库。

一种可能的解决方案是创建两个自定义模型,一个用于树视图(例如,MyTreeViewModel -> QAbstractItemModel,与QTreeView相关联),另一个用于表格视图(MyTableViewModel -> QAbstractItemModel,与QTableView)。

两个自定义模型应由使用数据库的同一代理提供。 键差异是树视图模型适用于整个数据库,而表视图模型只有一个子集,即主列表中所选项的子项。将其视为完整映射与数据库的部分映射。

当用户点击树状视图中的顶部节点列表时,您可以发出一个信号,该信号可由MyTableViewModel拾取,仅填充子项,并由QTableView显示

因为同一个代理服务于两个模型,所以您应该能够保持数据完整性,在某种意义上,一个模型对底层数据的更改应该反映在另一个模型中。这个解决方案对我的应用程序非常有用。希望这也适合你!

答案 1 :(得分:-1)

我不确定这是否是我自己问题的完整答案,但我更接近。在tableview上,我可以调用setRootIndex()并从qTreeView传入当前项。这仅用于显示表列表中当前树项的子项。

对我来说,它仍会显示我想要过滤的工具和子列表,但我认为这是一个不同的问题。