Как изменить цвет компонента делегата на карте в qt qml - PullRequest
0 голосов
/ 23 апреля 2020

Я использую MapQuickItem в качестве компонента делегата на карте. У меня есть три компонента. Я хочу изменить цвет компонента делегата, когда я нажимаю на компонент. И остальные цвета совпадают с цветом. Как изменить цвет только выбранного цвета компонента

 Plugin
{
    id: hereMaps
    name: "here"
    PluginParameter { name: "here.app_id"; value: "oBB4FivcP23m2UZQCj8K" }
    PluginParameter { name: "here.token"; value: "P-D8XRRGeVt0YphUuOImeA" }
}

Map {
    id: map
    anchors.fill: parent
    activeMapType: supportedMapTypes[1];
    zoomLevel: 18
    plugin: hereMaps
    center: QtPositioning.coordinate(19.997454, 73.789803)

    MapItemView {
        id: markerItem
        model: [
            { id: "marker1", color: "red" },
            { id: "marker2", color: "red" },
            { id: "marker3", color: "red" }
        ]
        delegate: mapMarkerComponent
    }

    Component {
        id : mapMarkerComponent

        MapQuickItem {
            id: mapMarker
            coordinate: QtPositioning.coordinate(19.997454, 73.789803)

            sourceItem: Rectangle {

                id: handle
                color: modelData.color
                width: 40
                height: 40

                MouseArea {
                    drag.target: parent
                    anchors.fill: parent
                    onClicked: {

                        handle.color = "green"

                    }
                }
            }

            onCoordinateChanged: {
                console.log(modelData.id + ":" + coordinate);
            }
        }
    }
   }

1 Ответ

1 голос
/ 23 апреля 2020

Наиболее очевидный подход состоит в том, чтобы перебрать все маркеры и сбросить их цвета, а затем изменить цвет маркера, на который нажали. Чтобы сделать это, измените onClicked на:

// switch to red if its green
if (handle.color == "#008000") {
    handle.color = "#ff0000";
    return;
}
// switch all markers to red
for(var marker in markerItem.children) {
    markerItem.children[marker].sourceItem.color = "#ff0000";
}
// switch clicked marker to green
handle.color = "#008000";

Однако это не лучшее решение (манипулирование цветами), если вы хотите «выбрать» маркер. Прочитайте о состояниях в QML ( ссылка ) и попробуйте реализовать какие-либо "нормальные" и "выбранные" состояния для ваших маркеров.

...