如何使用选择模型来处理代理模型?

Mar*_*ius 7 model-view-controller qt selectionmodel

我有一个模型和两个视图设置如下:

Model ---> OSortFilterProxyModel ---> OListView
Model ------------------------------> OTableView
Run Code Online (Sandbox Code Playgroud)

当用户在其中一个视图中选择某些内容时,我希望另一个视图镜像该选择.所以我想我会使用QSelectionModel将它们链接在一起.但这不起作用.我有一种感觉,因为观点认为它们有两种不同的模型,实际上它们具有相同的模型.有没有办法让这个工作?

Cal*_*itt 2

可能发生的情况是视图确实有两种不同的模型。一个是您的原始模型,另一个是排序过滤器模型。

我不确定这是否有效,这取决于 Qt 认为“激活”的内容,但您可以将一个函数连接到每个视图的激活插槽。这些将向您传递一个模型索引。您必须通过代理模型以适当的方向(mapFromSource 和 mapToSource)发送模型索引。然后,在另一个视图上调用 setCurrentIndex。

激活信号的文档指出,“激活”的含义因平台而异。您可能还可以锁定其他信号,例如选择模型的选择更改信号。您可能需要执行不同的调用才能更改用户所看到的选择。最后,只要您记住与源模型的映射,就可以在派生的 QSelectionModel 中完成甚至更容易。