Как назначить пользовательский объект для sourceItem? - PullRequest
0 голосов
/ 04 января 2019

A хотел бы визуализировать MapQuickItem в зависимости от условия if.

У меня есть два пользовательских объекта ClusterMarker , который является прямоугольником, и PromotionMarker , который является объектом изображения.Я хотел бы назначить их для MapQuickItem (который является делегатом для MapItemView), используя свойство sourceItem.

Вот как я это делаю:

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

Но теперь я получаю две ошибки.Первый указывает на первую скобку {id: c}: Ожидаемый токен ':' , а второй указывает на : Неожиданный токен ':' Как правильно выполнить это задание?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Лучше всего использовать 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 {}
    }
}
0 голосов
/ 04 января 2019

Я не уверен, что это лучший способ, но, похоже, он работает.

Создайте элемент динамически из компонентов:

...
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
    }
}
...