我想构建一个树,其中一个元素可以引用另一个元素。我想要构建的树是 像这样的东西:
A
|--- B
|--- C
| |--- D
| |--- E
|
|--- F
|--- P //this is a "pointer" to C
|--- D //first child of C
|--- E //second child of C
我发现了this和this关于我的问题,但没有找到解决方案。
问题是在QAbstractItemModel
中实现parent()。复制元素是不可能的,它可能是一个巨大的子树(我也希望它们在更改时保持同步)。
一个项目在模型中可以有多个父项(真正的父项,以及当前指向它的项目),如何确定当前正确的父项?
目前我只在[{1}}中存储Item*
,但当QModelIndex
当前为Item*
时,我无法确定索引是否表示元素D
低于D
或低于C
。
我希望在Qt项目模型中有一些方法可以解决这一到n的父子映射问题。我希望有一些方法可以做到这一点,否则我将需要实现我自己想要避免的小部件。
答案 0 :(得分:1)
您不需要为此编写自定义小部件。
一种解决方案是封装您的Items
,这样模型中的每个条目不仅包含Item*
,还包含一些跟踪其在树中的位置的标记。每个节点现在都是一个单独的实体(因此您可以轻松实现parent()
),但多个节点可以引用相同的Item
。
答案 1 :(得分:0)
对于每个项目,您可以存储指向其父项的指针。将子项添加到节点时,可以将this
作为参数提供给其构造函数,并且可以将项的父项设置为该引用。
答案 2 :(得分:0)
谢谢大家,我只是实现了一个包含多个父项的项目树视图。 正如Tom W所说,将我的模型数据包装到treeitem。