Qt 从DelegateModel创建QML项

Qt 从DelegateModel创建QML项,qt,qml,Qt,Qml,是否可以从DelegateModel中创建QML项 下面是一个示例DelegateModel: DelegateModel { id: delegateModel model: ListModel { ListElement { name: "#FAFAFA"; test: "object1" } ListElement { name: "#000000"; test: "object2" } } delegate: Re

是否可以从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"
}
结果应如下所示:

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数据。

您可以使用任何可用于实例化<代码>模型(查看)

例如,您可以将其用作
列表视图
网格视图
中继器
的模型。由于模型本身提供委托,因此不需要在
视图
中指定实例化该委托的任何委托

Column {
    Repeater {
        model: delegateModel
        // delegate: ... <--- Nothing here! Uses the delegate from the Model.
    }
}
需要注意的是,
DelegateModel
(没有
部分
)不能在多个视图中使用,因为每个条目/委托只能在同一时间实例化一次。如果你想要这个, 考虑使用A来过滤这些东西,并使用尽可能多的<代码>视图>代码>,根据需要提供自己的委托。