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