2012-03-19 78 views
4

我正在研究一個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(),即使我的模型返回的結果是肯定的,但如果有人問到,則會有孩子。如果我最終不得不給它一個子樹視圖,那很好。我只想確定沒有更好的方法來做到這一點。

+0

你有沒有找到解決方案?我有類似的情況,但抽象的項目模型似乎只允許第一列下的子樹。 – subhacom 2012-12-06 11:56:38

+0

我通過在第二列中放置單獨的樹視圖來解決它,如果我需要它擴展。不是最優雅的方法,但快速和容易。如果你希望它看起來無縫,你可能必須繼承QTreeView。自從去年5月份以來,我還沒有和Qt一起做過任何工作,所以我不能真正幫助過去。 – parkovski 2012-12-27 23:32:54

回答

0

我試圖實現雙重樹視圖我自己,有些東西一樣

+ 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您可以禁用選擇和編輯。

但我還沒有弄清楚如何在第二列獲得一棵樹。