QTreeView/QbstractItemModel在多列中的子树



我正在开发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(),即使我的模型会返回是的,如果有人问它,也有子级。

如果我最终不得不给它一个子树视图,那没关系。我只想确定没有比这更好的方法了。

我正在尝试实现一个双树视图,比如

+ 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
    ...

我对角色还不够了解,但你可以禁用选择和编辑,这样用户就不会选择"空格"。

但我还没有想出如何在第二列中找到一棵树。

相关内容

  • 没有找到相关文章

最新更新