我的問題是關於Qt及其QAbstractItemModel。如何在QAbstractItemModel中爲QTreeView創建人工節點
我有一個字符串和雙打的地圖(std::map<stringclass, double>
),我想在一個Qt小部件中呈現。雖然我可以使用QTableView,但我想利用這個事實,即地圖的按鍵形式爲「abc.def.ghi
」,其中可以有多個字符串,可以以「abc.def
」開頭,甚至更多以「abc
」開頭。
所以我想建立一個樹數據模型呈現在QTreeView像
(-) abc
|--(-)def
|--ghi 3.1415
|--jkl 42.0815
|--(+)pqr
|--(+)xyz
我std::map
是樹,所有其他節點將是暫時的,auxillary葉片的關鍵項目構造以支持用戶便利的摺疊。
不幸的是,這些方法rowCount
,index
,columnCount
,並data
有常量修飾語,所以我不能簡單地設置爲我QAbstractItemModel衍生物中一個標題auxillary數據結構,並改變那裏的數據結構。
這樣做的最佳做法是什麼?我是否應該在我的std::map
和QAbstractItemModel之間設置另一個班級層,還是有更明智的方法來做到這一點?
編輯1:雖然示出和使用的QTreeView,所以auxillary節點可能被丟棄並重建的std::map
可以改變。我的假設是,處理這個問題的最佳方式是重構QAbstractItemModel - 或者我應該簡單地將該模型丟棄並將新構造的模型分配給QTreeView?在這種情況下,我可以設置構造函數中的所有節點,而不會受到方法常量的困擾。
你說得對,我不需要並想改變'std :: map',但是如果我繼承'QAbstractItemModel'來添加私有成員(例如用於緩存輔助節點),我不能修改私有成員在這些方法中。而'std :: map'可能是'QTreeView'的生命週期,因此可能需要重構模型而不重構它。 – fawick 2010-02-01 11:12:27
我明白了。但是如果你想重新構造模型,當你的std :: map初始化的時候,當沒有const問題的時候這樣做! – 2010-02-01 12:35:46