Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT抽象项模型。同时使用QtreeView和QtableView_Qt_Treeview_Tableview_Qabstractitemmodel - Fatal编程技术网

QT抽象项模型。同时使用QtreeView和QtableView

QT抽象项模型。同时使用QtreeView和QtableView,qt,treeview,tableview,qabstractitemmodel,Qt,Treeview,Tableview,Qabstractitemmodel,我的应用程序是一个工具库管理器。它有一个包含列表和工具列表的树视图。它还有一个显示工具列表的表视图 当我单击树视图中的列表时,我想显示包含子列表的tableview。当我单击树中的单个工具时,我切换小部件并显示该工具的编辑表单 如何将tableview限制为仅包含树视图中选定节点的子节点 我的数据模型是一个自定义的QabstrationModel。我的情况与您的情况相似(不完全相同!)。在我分享我的经验之前,我假设您有一个数据库,其中包含组成列表/工具的项目 一种可能的解决方案是创建两个自定义模

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

当我单击树视图中的列表时,我想显示包含子列表的tableview。当我单击树中的单个工具时,我切换小部件并显示该工具的编辑表单

如何将tableview限制为仅包含树视图中选定节点的子节点

我的数据模型是一个自定义的QabstrationModel。

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

一种可能的解决方案是创建两个自定义模型,一个用于树状视图(例如,
mytreevewmodel->qabstracttemmodel
,与
QTreeView
)和一个用于表视图(
MyTableViewModel->qabstracttemmodel
,与
QTableView
关联)

这两个自定义模型应由处理数据库的同一代理提供。关键区别在于树状视图模型适用于整个数据库,而表视图模型只适用于一个子集,即主列表中所选项的子项。可以将其视为完整映射v。数据库的部分映射

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


因为同一个代理服务于两个模型,所以您应该能够维护数据完整性,从某种意义上说,一个模型对基础数据的更改应该反映在另一个模型中。这个解决方案在我的应用程序中运行得非常好。希望这对你也有用

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


对我来说,它仍然显示工具和子列表,我想对它们进行筛选,但我认为这是另一个问题。

@sliptonic不同的视图(表、树等)都是一种视图。在本例中,您已将所有数据映射到两个不同的视图。视图无法过滤数据。我的解决方案通过创建一个过滤数据的模型来解决这个问题,然后
QTableView
显示减少的数据。QT的模型/视图/委托体系结构允许我们这样做。如果我的解决方案不正确,可能是我对您的问题的理解不正确,也可能是没有提出正确的问题。如果您发现与创建单独的模型相比,过滤视图中显示的数据更容易,请将其发布在此处。谢谢。请将您的评论放在答案下面,而不是单独创建一个答案。我的评论不是关于另一个答案。这是一个尚未讨论的新答案,明白了。您在表视图中仅映射和显示树状视图中选定项下的子项的策略是什么?由于没有示例显示如何处理,所以投票被否决。