多列QTreeView/QAbstractItemModel子树
问题描述:
我正在研究一个QAbstractItemModel
的子类,它插入QTreeView
。它有一个递归的Name = Value
类型结构 - 任何索引都可以有自己的子树。这在左侧是很好的,因为几乎所有的树都是以这种方式工作的。问题是有时候我只想在右侧使用一个子树 - 一个值列表。正如我现在所看到的,它似乎应该工作,但Qt从来没有打电话rowCount()
右侧,并从来没有意识到,应该有一个子树那里。多列QTreeView/QAbstractItemModel子树
我现在所拥有的解决方案基本上是为此创建一个单独的模型,并在每次发生这种情况时使用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
...
我不知道有足够的了解角色还,但使“空白”不是由用户selectabe您可以禁用选择和编辑。
但我还没有弄清楚如何在第二列获得一棵树。
你有没有找到解决方案?我有类似的情况,但抽象的项目模型似乎只允许第一列下的子树。 – subhacom 2012-12-06 11:56:38
我通过在第二列中放置单独的树视图来解决它,如果我需要它扩展。不是最优雅的方法,但快速和容易。如果你希望它看起来无缝,你可能必须继承QTreeView。自从去年5月份以来,我还没有和Qt一起做过任何工作,所以我不能真正帮助过去。 – parkovski 2012-12-27 23:32:54