3

我有一组其中QPointFMarkerModel子类来自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

4

1 回答 1

0

如果您通过 MapItemView 从 RouteModel 获取 MapRoute,则始终将routeData分配给路由。routeData是 RouteModel 公开的角色,让您可以访问 Route 元素。

现在,对于您的具体情况,似乎 MapRoute 不适合。在我看来,最好的方法有 2 个单独的模型:一个每行公开一个 js 数组,您将其分配给 MapPolyline 委托的路径属性,另一个公开一个 QGeoCoordinate 每行(更多行),您将使用使用 MapCircle 或 MapQuickItem 委托

于 2017-09-05T13:15:01.583 回答