4

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

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

我发现了这个这个关于我的问题但是在那里没有找到解决方案。

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

一个项目在模型中可以有多个父级(真正的父级,以及当前指向它的项目),我如何确定当前正确的父级?目前我只有一个Item*存储在 中QModelIndex,但是当Item*当前D我无法确定索引是指D低于C还是低于的元素P

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

4

3 回答 3

2

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

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

于 2012-10-01T16:55:28.750 回答
0

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

于 2012-10-01T17:14:05.453 回答
0

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

于 2012-12-16T13:02:21.683 回答