首页 文章

从DelegateModel创建QML项目

提问于
浏览
2

是否可以从DelegateModel创建QML项目?

Here is a example 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)
    }
 }

The Result should look like this:

Rectangle
{
    objectName: "object1"
    width: 50
    height: 50
    color: "#FAFAFA"
}
Rectangle
{
    objectName: "object2"
    width: 50
    height: 50
    color: "#000000"
}

对于每个ListElement,都有一个创建的委托,其中包含插入的ListElement数据 .

1 回答

  • 1

    您可以使用任何可用于实例化 ModelView )的内容

    例如,您可以将其用作 ListViewGridViewRepeater 的模型 . 由于模型自己提供委托,因此您无需在 View 中指定实例化它的任何委托 .

    Column {
        Repeater {
            model: delegateModel
            // delegate: ... <--- Nothing here! Uses the delegate from the Model.
        }
    }
    

    如果使用 create(index) -Method,将创建委托,但没有父委托,因此不会显示委托 . 因此,您需要设置父级,以显示它:

    Button {
        onClicked:  {
            for (var a = 0; a < dm.items.count; a++) {
                var o = dm.items.create(a)
                o.parent = r
            }
        }
    }
    

    您需要注意, DelegateModel (没有 PackageParts )不能在多个视图中使用,因为每个条目/委托只能同时实例化一次 . 如果你想拥有它,可以考虑使用QSortFilterProxyModel过滤内容,并根据需要使用尽可能多的 Views 来提供自己的代理 .

相关问题