Qt树模型与多个父母的项目

时间:2012-10-01 16:37:28

标签: c++ qt

我想构建一个树,其中一个元素可以引用另一个元素。我想要构建的树是 像这样的东西:

A
|--- B
|--- C
|    |--- D
|    |--- E
|
|--- F
     |--- P    //this is a "pointer" to C
          |--- D   //first child of C
          |--- E   //second child of C

我发现了thisthis关于我的问题,但没有找到解决方案。

问题是在QAbstractItemModel中实现parent()。复制元素是不可能的,它可能是一个巨大的子树(我也希望它们在更改时保持同步)。

一个项目在模型中可以有多个父项(真正的父项,以及当前指向它的项目),如何确定当前正确的父项? 目前我只在[{1}}中存储Item*,但当QModelIndex当前为Item*时,我无法确定索引是否表示元素D低于D或低于C

我希望在Qt项目模型中有一些方法可以解决这一到n的父子映射问题。我希望有一些方法可以做到这一点,否则我将需要实现我自己想要避免的小部件。

3 个答案:

答案 0 :(得分:1)

您不需要为此编写自定义小部件。

一种解决方案是封装您的Items,这样模型中的每个条目不仅包含Item*,还包含一些跟踪其在树中的位置的标记。每个节点现在都是一个单独的实体(因此您可以轻松实现parent()),但多个节点可以引用相同的Item

答案 1 :(得分:0)

对于每个项目,您可以存储指向其父项的指针。将子项添加到节点时,可以将this作为参数提供给其构造函数,并且可以将项的父项设置为该引用。

答案 2 :(得分:0)

谢谢大家,我只是实现了一个包含多个父项的项目树视图。 正如Tom W所说,将我的模型数据包装到treeitem。