gpt4 book ai didi

多列中的 QTreeView/QAbstractItemModel 子树

转载 作者:行者123 更新时间:2023-12-05 01:15:09 41 4
gpt4 key购买 nike

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

我现在的解决方案基本上是为此创建一个单独的模型,并使用 setIndexWidget每次发生这种情况时都给它一个单独的 TreeView 。这很好,但我真的很想让子树显示在右边,而不必到处扔 TreeView 。我的模型响应那里有子树,但 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()在该列中,即使我的模型会返回“是的”,如果有人问,也有 child 。

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

最佳答案

我正在尝试实现我自己的双 TreeView ,例如

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

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

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

关于多列中的 QTreeView/QAbstractItemModel 子树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779386/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com