我正在开发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
...
我对角色还不够了解,但你可以禁用选择和编辑,这样用户就不会选择"空格"。
但我还没有想出如何在第二列中找到一棵树。