文檔上說:
DelegateModel用於封裝model和delegate
使用情況:
- 當model爲QAbstractItemModel的子類,獲取和操作modelIndex
- 和Package一起使用,提供multiple views。
- 和DelegateModelGroup一起使用,爲delegate item 提供排序和過濾
DelegateModelGroup提供了訪問DelegateModel的delegate items的方法,同時能夠排序和過濾這些items
DelegateModel中的items初始條件下fangzaiDelegateModel::items這個組中(這個組一般直接反映DelegateModel::model中的數據)。items中的items可以被改變,方法是將DelegateModel::filterOnGroup設置爲DelegateModel::groups中的一個。
DelegateModelGroup中的數據可以通過get方法得到,返回的object包含組成員和序號信息,以及model data。move方法可於排序,remove可用於過濾。setGroups和Package delegates用於將數據分類到不同的view中
insert方法可爲model增加數據項,一般用在先提供模擬數據項或者佔位數據項(然後當數據available時使用resolved添加爲正真數據)
注意,VisualDataGroup和DelegateModelGroup是等價的(兼容)
VisualDataModel和DelegateModel也是兼容的。
如何理解DelegateModel和DelegateModelGroup?
DelegateModel中有一個默認的DelegateModelGroup,名字爲items。
用戶可以通過DelegateModel::groups添加新的DelegateModelGroup
DelegateModel::model中所有的數據項必須屬於其中一組(默認屬於items組)
改變數據項所屬組:
通過DelegateModelGroup::get()方法取出,然後設置item.groups爲指定組名
或者使用DelegateModelGroup::setGroups將本組所有數據項轉移到其他組
或者使用DelegateModelGroup::removeGroups將本組所有數據刪除(應該和setGroups一樣的效果)
組內數據項發生變動時,可通過onChange進行捕獲
delegate顯示的內容:
默認顯示的內容是name爲items的DelegateModelGroup的數據
可通過設置filterOnGroup,改變當前delegate顯示內容
結合Package使用:
定義Package,將其中的控件使用Package.name進行命名,從而實現分組。
最後通過指定 delegatemodelid.part.xxx到model,實現顯示一部分數據。
參考:Package