4

我正在研究一个QAbstractItemModel插入到QTreeView. 它具有递归Name = Value类型结构——任何索引都可以有自己的子树。这在左侧很好,因为几乎每个树视图都是这样工作的。问题是有时我只想要右侧的子树 - 值列表。正如我现在拥有的那样,它似乎应该可以工作,但是 Qt 从来没有要求rowCount()右侧,也从来没有意识到那里应该有一个子树。

我现在拥有的解决方案基本上是为此创建一个单独的模型,并setIndexWidget在每次发生这种情况时给它一个单独的树视图。这很好,但我真的很想让子树显示在右侧,而不必到处乱扔树视图。我的模型回应说那里有子树,但 Qt 从不要求它们。

如果这有点不清楚,这是我想要完成的基本想法:

- Root        |
  - Name 1    |    Value
      Name 2  |  - Compound Value
              |      Sub-value 1
              |      Sub-value 2
      Name 3  |  + Compound Value (collapsed)
  + Name 4    |    Value

事实上,复合值不会在它们旁边获得+' 和',因为 Qt 从不调用或在该列中,即使我的模型会返回是的,如果被问到,有孩子。-hasChildren()rowCount()

如果我最终不得不给它一个子树视图,那很好。我只是想确定没有更好的方法可以先做到这一点。

4

1 回答 1

0

我正在尝试实现我自己的双树视图,例如

+ a        |    A
  + b      |  + B
    c      |      C

从我所见,您可以通过返回空数据来在名称 2 和名称 3 之间留出空格,例如名称 2 下的空字符串,这将使您能够在其前面有一个 +。

所以这样的事情可能会有所帮助

def data(self, index, role): 
    ...
    if item.pathdepth() > 3 : 
        return " "
    ...

def flags(self, index)
    ...
    if item.pathdepth() > 3 : 
        return Qt.Some_Role but not others
    ...

我对角色的了解还不够,但是您可以禁用选择和编辑,以便用户不会选择“空白”。

但我还没有弄清楚如何在第二列中获得一棵树。

于 2012-08-05T08:31:02.310 回答