QtAbstractItemModel。一起使用 QtreeView 和 QtableView
QtAbstractItemModel. Using QtreeView and QtableView together
我的应用程序是一个工具库管理器。它有一个包含列表和工具列表的树视图。它还有一个显示工具列表的表格视图。
当我单击树视图中的列表时,我想显示带有子项列表的表视图。当我单击树中的单个工具时,我会切换小部件并显示该工具的编辑表单。
如何将表视图限制为仅显示树视图中所选节点的子节点?
我的数据模型是自定义 qAbstractItemModel。
我的情况与您相似(不完全相同!)。在分享我的经验之前,我的假设是您有一个数据库,其中包含构成您的 lists/tools.
的项目
一种可能的解决方案是创建两个自定义模型,一个用于树视图(例如,MyTreeViewModel -> QAbstractItemModel
,与 QTreeView
关联),一个用于 table 视图(MyTableViewModel -> QAbstractItemModel
, 关联 QTableView
).
两个自定义模型应该由使用数据库的同一个代理提供。 主要区别 树视图模型适用于整个数据库,而 table 视图模型仅适用于子集,即所选项目的子项主要清单。将其视为数据库的完整映射与部分映射。
当用户单击树视图中的顶部节点列表时,您可以发出一个信号,该信号可以被 MyTableViewModel
拾取,仅填充子节点,并由 [=13] 显示=].
因为同一个代理服务于两个模型,所以您应该能够保持数据完整性,从某种意义上说,一个模型对基础数据的更改应该反映在另一个模型中。该解决方案非常适合我的应用程序。希望这对你也有用!
我不确定这是否是我自己问题的完整答案,但我更接近了。在 table 视图上,我可以调用 setRootIndex() 并从 qTreeView 传入当前项目。这只显示 table 列表中当前树项的子项。
对我来说,它仍然同时显示工具和子列表,我想过滤它们,但我认为这是一个不同的问题。
我的应用程序是一个工具库管理器。它有一个包含列表和工具列表的树视图。它还有一个显示工具列表的表格视图。
当我单击树视图中的列表时,我想显示带有子项列表的表视图。当我单击树中的单个工具时,我会切换小部件并显示该工具的编辑表单。
如何将表视图限制为仅显示树视图中所选节点的子节点?
我的数据模型是自定义 qAbstractItemModel。
我的情况与您相似(不完全相同!)。在分享我的经验之前,我的假设是您有一个数据库,其中包含构成您的 lists/tools.
的项目一种可能的解决方案是创建两个自定义模型,一个用于树视图(例如,MyTreeViewModel -> QAbstractItemModel
,与 QTreeView
关联),一个用于 table 视图(MyTableViewModel -> QAbstractItemModel
, 关联 QTableView
).
两个自定义模型应该由使用数据库的同一个代理提供。 主要区别 树视图模型适用于整个数据库,而 table 视图模型仅适用于子集,即所选项目的子项主要清单。将其视为数据库的完整映射与部分映射。
当用户单击树视图中的顶部节点列表时,您可以发出一个信号,该信号可以被 MyTableViewModel
拾取,仅填充子节点,并由 [=13] 显示=].
因为同一个代理服务于两个模型,所以您应该能够保持数据完整性,从某种意义上说,一个模型对基础数据的更改应该反映在另一个模型中。该解决方案非常适合我的应用程序。希望这对你也有用!
我不确定这是否是我自己问题的完整答案,但我更接近了。在 table 视图上,我可以调用 setRootIndex() 并从 qTreeView 传入当前项目。这只显示 table 列表中当前树项的子项。
对我来说,它仍然同时显示工具和子列表,我想过滤它们,但我认为这是一个不同的问题。