如果你是一個Pythonist,有一個存儲在QVector<QVector<QString>> data;
(或者一個列表的字符串列表)我應該如何子類QAbstractItemModel
能夠顯示(只讀)這樣一個簡單的結構在QTreeView
?我想看到這樣的事情:簡單的2級層次結構子類化QAbstractItemModel
- 「組1」
- 數據[0] [0]
- 數據[0] [1]
- 「組2 「
- 數據[1] [0]
- 數據[1] [1]
等
從文檔,我讀,我應該重寫index()
,parent()
,rowCount()
,columnCount()
和data()
。爲了實現我的目標,這些方法的最簡單可能的實現是什麼?
爲了使可能的答案更具啓發性,一個子類QAbstractItemModel
如何不使用內部指針(存儲在QModelIndex
es)。我所看到的所有例子都是以樹的形式使用底層模型,節點(有指向子節點和父節點的指針),這些節點使用內部指針很容易包裝在QAbstractItemModel
中。但是,即使沒有樹/節點式底層結構,也沒有QModelIndex
的內部指針,我們是否可以使用QAbstractItemModel
?我的問題是基於文檔說你可以使用內部指針,但我還沒有看到沒有它的任何示例。
您的數據結構不足以表示2級層次結構。具體而言,頂級字符串沒有存儲空間 - 即「組1」,「組2」等。在python中,您需要使用如下形式:'[[「group1」,[1,2, 3]],[「group 2」,[1,2,3]],...]'。 – ekhumoro
如果您沒有使用內部指針,那麼如何將模型索引映射到數據結構中的位置?看起來你需要使用parent()來做一個自下而上的遍歷來計算數據結構中的一系列索引,而且這個數據結構必須通過模型的幾乎所有方法不斷重新計算,這使得它(累計)非常昂貴的操作,所以也許這就是爲什麼所有的例子都是基於內部指針(這有效緩存了昂貴的查找操作)。 – ekhumoro