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,它沒有被定義爲任何角色(我仍然無條件地返回有效字符串)。
執行此操作時有什麼我錯過了嗎?
作爲一項規則,您希望在從'data'函數返回值時儘可能保持吝嗇。如果你檢查[文檔](https://qt-project.org/doc/qt-4.8/qt.html#ItemDataRole-enum),你可以看到角色13是'Qt :: SizeHintRole' - 我會想象一下當你返回一個字符串時你的視圖變得相當困惑! –
@XavierHolt你是對的。當它僅僅在DisplayRole和一個'QVariant()'else返回時,我改變了它。據推測,當時我有另一個錯誤,現在一直有這個問題。你能否把它作爲答案張貼,所以我可以標記它是正確的? – Nobody
太棒了!很高興工作 - 我會在一分鐘內回覆。 –