我在 QGroundMap 覆盖方面遇到问题。我有一个自定义 QGround 小部件,我需要在 QGroundMap 上动态绘制多个 MapPolyline 对象,但唯一的方法是使用此代码直接注入它。
Component.onCompleted: {
objMgr.createObjects([mapLine], _root.mapControl, true /* parentObjectIsMap */)
}
标准MapItemView和其他元素无法正常工作。
我正在尝试实例化多个 MapPolyLine 对象,但它也无法正常工作:
Instantiator {
id: testInstantiator
model: globalCoordinates
function getIndex(index) {
console.log("currentIndexIs")
console.log(index)
return index
}
delegate: Component {
id: mapLine
MapPolyline {
id: targetPolyLine
line.width: 3
line.color: "red"
z: QGroundControl.zOrderWaypointLines
path: testInstantiator.model[index]
}
}
}
我的全局坐标模型如下所示:
property var globalCoordinates: [
[QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 18)],
[QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 20)],
[QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 22)],
[QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 24)],
[QtPositioning.coordinate(42, 13), QtPositioning.coordinate(42, 26)]
]
在实例化器中画线的唯一方法是将索引替换为数字,如下所示:
Instantiator {
id: testInstantiator
model: globalCoordinates
function getIndex(index) {
console.log("currentIndexIs")
console.log(index)
return index
}
delegate: Component {
id: mapLine
MapPolyline {
id: targetPolyLine
line.width: 3
line.color: "red"
z: QGroundControl.zOrderWaypointLines
path: testInstantiator.model[1] //it will draw a single line
}
}
}
我怀疑,实例化器不能多次委托组件。否则无法正确传输所有必要的数据。
有什么方法可以将MapPolyLine注入到QGroundMap中,或者正确地委托注入的组件吗?
您可以使用
MapItemView
。
如果您的模型是一个简单的数组,我们可以将模型设置为length - 1
。
然后我们只需使用 index
和 index + 1
来构造 MapPoyline
property var globalCoordinates: [
{ latitude: -27, longitude: 153.0 },
{ latitude: -27, longitude: 154.1 },
{ latitude: -28, longitude: 153.5 },
{ latitude: -29, longitude: 153.5 }
]
Map {
id: map
anchors.fill: parent
plugin: mapPlugin
zoomLevel: 14
MapItemView {
model: globalCoordinates.length - 1
delegate: MapPolyline {
line.width: 3
line.color: 'red'
path: [
globalCoordinates[index],
globalCoordinates[index + 1]
]
}
}
}