0

A 想可视化 MapQuickItem 取决于 if 条件。

我有两个自定义对象ClusterMarker是一个 Rectangle 和PromotionMarker这是一个 Image 对象。我想使用 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 ':'

进行此分配的正确方法是什么?

4

2 回答 2

0

最好的方法是使用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 {}
    }
}
于 2019-01-04T14:16:24.990 回答
0

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

从组件动态创建项目:

...
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
    }
}
于 2019-01-04T13:10:28.540 回答