2012-08-31 79 views
2

我已經從QAbstractItemModel派生編碼我自己的數據樹,但QTreeView沒有顯示。QTreeView不顯示數據

大多數我看到了,因爲錯誤的變量續航時間得到了解決類似問題的答案,所以這裏是我的模型的配置代碼:

ui.tvHierarchy->setModel(
    new MetaHierarchyModel(
     cutOffExtension(
      fileName.toStdString() 
     ) 
    ) 
); 

在建築模型得到充滿根節點數據和稍後應根據需要加載更多數據(通過fetchMore)。

我開始輸出每個被調用的函數。這是一個日誌調用序列:

columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
hasChildren(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return true 
hasChildren(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return true 
canFetchMore(QModelIndex(-1,-1,0x0,QObject(0x0)))) 
    return false 
rowCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
hasChildren(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return true 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
parent(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return QModelIndex(-1,-1,0x0,QObject(0x0)) 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
data(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) , 13) 
    return "Metaparticle 1" 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
parent(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return QModelIndex(-1,-1,0x0,QObject(0x0)) 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
data(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) , 13) 
    return "Metaparticle 1" 

roleNames()輸出:

QHash((0, "display")(1, "decoration")(2, "edit")(3, "toolTip")(4, "statusTip")(5, "whatsThis")) 

最後四行然後永遠重複(或者至少要等到我失去了我的耐心)。 對我來說,它看起來像獲取了根數據,但它們永遠不會顯示。奇怪的是,data的最後一個參數int role的值是13,它沒有被定義爲任何角色(我仍然無條件地返回有效字符串)。

執行此操作時有什麼我錯過了嗎?

+0

作爲一項規則,您希望在從'data'函數返回值時儘可能保持吝嗇。如果你檢查[文檔](https://qt-project.org/doc/qt-4.8/qt.html#ItemDataRole-enum),你可以看到角色13是'Qt :: SizeHintRole' - 我會想象一下當你返回一個字符串時你的視圖變得相當困惑! –

+0

@XavierHolt你是對的。當它僅僅在DisplayRole和一個'QVariant()'else返回時,我改變了它。據推測,當時我有另一個錯誤,現在一直有這個問題。你能否把它作爲答案張貼,所以我可以標記它是正確的? – Nobody

+0

太棒了!很高興工作 - 我會在一分鐘內回覆。 –

回答

6

QAbstractItemModel::data函數對返回的數據應該儘可能地小氣。確保只有在display role和列號完全匹配時才返回數據。在所有其他情況下,只返回一個無效的QVariant(只是調用默認構造函數),並且您的視圖控件將用合理的默認值填充這些缺失的值。