在两个不同的视图中显示一个数据树

时间:2016-07-31 20:44:27

标签: qt model-view-controller

enter image description here

大家好。

  1. 我有一个项目树,如上图所示(项目树)。
  2. 我需要以图像上显示的方式显示此树(视图)。 它有两个视图,树视图和列表视图。树视图应显示整个项目树,列表视图应显示树视图中所选项的属性。 (在图像上显示猫项目的属性)
  3. 现在实现它的方式显示在图像的“当前实现”部分。 TreeModel包含项目树,当您单击TreeView中的项目时,当前项目将发送到ListModel以显示其属性。
  4. 我遇到的问题是,在两个视图中,项目都是可编辑的。在树视图中,您可以编辑项目的名称,此更改也应显示在列表视图中。相反的方向也是如此。更改Cat项的名称应反映在treeView cat项上。 由于它是两个不同的模型,因此仅当您将鼠标悬停在另一个视图上时才会进行更改。 我目前所做的是对于其中一个视图中的已更改项目,我通过QModelIndex :: match()在另一个视图中搜索项目,然后通过emit dataChanged()更新视图的该部分。我不确定这是一个好方法。所以,如果你可以给我一些关于如何更好地完成这项工作的想法。 谢谢。

1 个答案:

答案 0 :(得分:1)

您应该只有一个型号。您只需要QAbstractItemView::setRootIndex方法:您可以将树中的当前项设置为表视图的根。或者,您可以使用代理视图模型来调整数据以便以特定形式显示。