如何将自定义对象分配给 sourceItem?

How to assign custom object to sourceItem?

A 想根据 if 条件可视化 MapQuickItem。

我有两个自定义对象 ClusterMarker,它是一个矩形对象和 PromotionMarker,它是一个图像对象。我想使用 sourceItem 属性.

将它们分配给 MapQuickItem(它是 MapItemView 的委托)

这是我的做法:

MapItemView
{
    id: promMarkersView
    ...
    delegate: MapQuickItem
    {
        id: promMarkersDelegate
        coordinate: QtPositioning.coordinate(lat, lon)
        sourceItem: cntOfChilds ? ClusterMarker {id: c} : PromotionMarker {id: p}
        ...
    }
}

但现在我遇到了两个错误。第一个指向 {id: c} 的第一个括号:Expected token ':',第二个指向 : Unexpected token ':'

做这个赋值的正确方法是什么?

我不确定这是否是最好的方法,但似乎可行。

从组件动态创建项目:

...
sourceItem: index % 2 ? mapItemDelegate1.createObject() : mapItemDelegate2.createObject()
Component.onDestruction: sourceItem.destroy();
...

并将您的项目指定为组件,例如:

Component {
    id: mapItemDelegate1
    Rectangle {
        color: "red"
        width: 6
        height: 6
    }
}

Component {
    id: mapItemDelegate2
    Rectangle {
        color: "blue"
        radius: 2
        width: 6
        height: 6
    }
}

最好的方法是使用 Loader:

MapItemView {
    id: promMarkersView
    ...
    delegate: MapQuickItem {
        id: promMarkersDelegate
        coordinate: QtPositioning.coordinate(lat, lon)
        sourceItem: Loader {
            sourceComponent: cntOfChilds ? c : p
        } 
        ...
    }

    Component {
        id: c
        ClusterMarker {}
    }

    Component {
        id: p
        PromotionMarker {}
    }
}