如何获得选择模型以与代理模型一起使用?
时间:2020-03-06 14:45:17 来源:igfitidea点击:
我有一个模型和两个像这样设置的视图:
Model ---> OSortFilterProxyModel ---> OListView Model ------------------------------> OTableView
当用户在其中一个视图中选择某个内容时,我希望另一个视图能够反映该选择。所以我想我会使用QSelectionModel将它们链接在一起。但这是行不通的。我感觉是因为视图认为它们具有两个不同的模型,而实际上它们具有相同的模型。有没有办法让它工作?
解决方案
可能发生的情况是视图确实具有两个不同的模型。一个是原始模型,另一个是排序过滤器模型。
我不确定这是否行得通,这取决于Qt认为"已激活"的内容,但是我们可以将功能连接到每个视图的已激活插槽。这些将为我们传递模型索引。我们必须通过代理模型以适当的方向(mapFromSource和mapToSource)发送模型索引。然后,在另一个视图上调用setCurrentIndex。
已激活信号的文档指出,"已激活"的内容因平台而异。我们可能还会闩锁其他信号,例如选择模型的选择更改信号。我们可能必须进行其他调用才能更改用户看到的选择。最后,只要我们记得映射到源模型/从源模型映射,就可以在派生的QSelectionModel中完成甚至更容易。
不太确定如何实现模型子类,但是选择取决于正确的持久模型索引。可以提供一些源代码吗?两者都使用相同的选择模型吗?