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