我正在研究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()
,即使我的模型会返回是,如果被问到,也会有孩子。
如果我最终不得不给它一个子树视图,那很好。我想确定首先没有更好的方法。
答案 0 :(得分:0)
我正在尝试实现双树视图我的自我,有些像
+ a | A
+ b | + B
c | C
从我所看到的你可以通过返回空数据来建立名称2和名称3之间的空格,例如在Name 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
...
我对角色还不太了解,但您可以禁用选择和编辑,以便用户不会选择“空白”。
但我还没有弄清楚如何在第二栏中找到一棵树。