代码:
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"}
}