是否可以从DelegateModel创建QML项目?
以下是DelegateModel的示例:
DelegateModel
{
id: delegateModel
model: ListModel
{
ListElement { name: "#FAFAFA"; test: "object1" }
ListElement { name: "#000000"; test: "object2" }
}
delegate: Rectangle
{
objectName: test
width: 50
height: 50
color: name
}
Component.onCompleted:
{
Utils.var_dump(items,3)
items.create(0)
Utils.var_dump(items.get(0),3)
}
}
结果应如下所示:
Rectangle
{
objectName: "object1"
width: 50
height: 50
color: "#FAFAFA"
}
Rectangle
{
objectName: "object2"
width: 50
height: 50
color: "#000000"
}
对于每个ListElement,都有一个创建的委托,其中包含插入的ListElement数据。
答案 0 :(得分:1)
您可以使用任何可用于实例化Model
(a View
)的任何内容
例如,您可以将其用作ListView
,GridView
或Repeater
的模型。由于模型自己提供委托,因此您无需在View
中指定实例化该委托的任何委托。
Column {
Repeater {
model: delegateModel
// delegate: ... <--- Nothing here! Uses the delegate from the Model.
}
}
如果使用create(index)
- 方法,将创建委托,但没有父代,因此不会显示。因此,您需要设置父级,以显示它:
Button {
onClicked: {
for (var a = 0; a < dm.items.count; a++) {
var o = dm.items.create(a)
o.parent = r
}
}
}
您需要注意,DelegateModel
(没有Package
和Parts
)不能在多个视图中使用,因为每个条目/委托只能在一次实例化同一时间。如果你想拥有它,
考虑使用QSortFilterProxyModel
过滤内容,并根据需要使用尽可能多的Views
来提供自己的代理。