AbstractItemModel в QML-маршрут

У меня есть набор QPointF в MarkerModel какие подклассы из AbstractListModel, Каждый такой маркер имеет статус, в зависимости от того, какой он цветной. Я хочу нарисовать все эти маркеры на карте вместе с ломаной, которая соединяет все точки, которые имеют определенный статус. И я буду обновлять модель со стороны C++. Это мой QML

Map {
    id: map
    anchors.fill: parent
    plugin: mapPlugin
    center: QtPositioning.coordinate(22.5726, 88.3639)
    zoomLevel: 14

    MapItemView {
        model: markerModel
        // delegate: markerDelegate // markerDelegate works
        delegate: routeDelegate // routeDelegate does not work
    }

    Component {
        id: markerDelegate

        MapQuickItem{
            anchorPoint: Qt.point(2.5, 2.5)
            coordinate: QtPositioning.coordinate(position.x, position.y)
            zoomLevel: 0
            sourceItem: Rectangle{
                width:  settings.marker_size;
                height: settings.marker_size;
                radius: settings.marker_size/2;
                color:  settings.marker_colors[status]
                border.color: "white"
                border.width: 1
            }
        }
    }
    Component{
        id: routeDelegate

        MapRoute{
            route: markerModel
            line.color: "blue"
            line.width: 5
            smooth: true
            opacity: 0.8
        }
    }
}

Я на самом деле хочу и точки, и полилинию на сцене. Однако, поскольку я не знаю, как поместить их обоих в сцену, я сначала пытался показать точки модели, используя markerDelegate, который работал. Теперь я хочу рассматривать эти точки как полилинию с routeDelegate, Но жалуется

Невозможно назначить MarkerModel для QDeclarativeGeoRoute

1 ответ

Если вы используете MapRoute из RouteModel через MapItemView, вы всегда назначаете routeData для route. routeData - это роль, которую предоставляет RouteModel, чтобы позволить вам получить доступ к элементам Route.

Теперь, для вашего конкретного случая, кажется, что MapRoute не подходит. На мой взгляд, наилучший подход состоит в том, чтобы иметь 2 отдельные модели: одну, предоставляющую один массив js для каждой строки, которую вы назначаете свойству пути делегата MapPolyline, и одну, предоставляющую одну QGeoCoordinate для каждой строки (так много других строк), которую вы будете использовать с MapCircle или делегатом MapQuickItem

Другие вопросы по тегам