代碼:
ListModel{
id: delegatemodel
ListElement{name1:"dog"; name2:"cat"}
ListElement{name1:"man"; name2:"girl"}
}
ListView{
model:delegatemodel.parts.list
}
GridView{
model:delegatemodel.parts.grid
}
DelegateModel{
id: delegatemodel
model: listmodel
delegate: Package{
Text{text:name1;Package.name:"list"}
Text{text:name2;Package.name:"grid"}
}
}
上述代碼用ListView顯示name1的數據,使用GridView顯示name2的數據。
其中的關鍵在於Pakage的定義,使用附屬的屬性Package.name爲兩個Text聲明不同的名字:list, grid。
這樣,ListView和GridView就可以通過DelegateModel.parts進行定位。
在使用過程中,Package實際上是可以被看作Delegate使用的。不過需要注意的是:Package.name爲空或者沒有設置Package.name的最上層控件是不能被顯示的。
例如:
Package{
Text{text:name1; Package.name:"list"}
Text{text:name2; Package.name:"grid"}
Rectangle{
width:100;height:100
}
}
上面的Rectangle是無法顯示的。
甚至在Rectangle中設置Package.name:"list",也無法在listView中顯示(只能設置一次,第一次有效)。
除非,將Rectangle的parent設置爲擁有Package.name的控件如:
Package{
Text{
text:name1; Package.name:"list"
Rectangle{
width:100;height:100
}
}
Text{text:name2; Package.name:"grid"}
}