Qt 如何在地图上拖动多个目标?
我想实现一个功能,用户可以在地图上拖动标记(定义为MapQuickItem)并自动更改其路径(定义为MapPolyline)。目前我只能拖动标记,但不知道如何更改其路径 如果我想在地图下定义DropArea并调用MapPolyline.removeCoordinate()函数来更改路径,那么如何访问委托中的索引?我不确定这个想法是否可行 代码如下:Qt 如何在地图上拖动多个目标?,qt,qml,qtquick2,Qt,Qml,Qtquick2,我想实现一个功能,用户可以在地图上拖动标记(定义为MapQuickItem)并自动更改其路径(定义为MapPolyline)。目前我只能拖动标记,但不知道如何更改其路径 如果我想在地图下定义DropArea并调用MapPolyline.removeCoordinate()函数来更改路径,那么如何访问委托中的索引?我不确定这个想法是否可行 代码如下: Map { id: map anchors.fill: parent plugin: m
Map {
id: map
anchors.fill: parent
plugin: mapPlugin
zoomLevel: 14
activeMapType: supportedMapTypes[7]
/* maker */
MouseArea {
anchors.fill: parent
onClicked: {
var crd = map.toCoordinate(Qt.point(mouseX, mouseY))
console.log(crd)
markerModel.append({ "latitude": crd.latitude, "longitude": crd.longitude})
line.addCoordinate(crd)
}
}
MapItemGroup {
MapPolyline {
id: line
line.width: 3
line.color: "#515151"
}
MapItemView {
add: Transition {}
remove: Transition {}
model: ListModel {
id: markerModel
}
delegate:
MapQuickItem {
id: marker
coordinate: QtPositioning.coordinate(latitude, longitude)
anchorPoint: Qt.point(markerImage.width * 0.5, markerImage.height * 0.5)
sourceItem: Image {
id: markerImage
z: 5
width: 30
height: 30
source: index <= 0 ? "Images/starting point.svg" : "Images/point black.svg"
MouseArea {
anchors.fill: parent
onClicked: {
line.removeCoordinate(index);
markerModel.remove(index);
}
drag.target: marker
}
}
}
/* maker */
}
}
}
Map{
id:地图
锚定。填充:父级
插件:mapPlugin
zoomLevel:14
activeMapType:supportedMapTypes[7]
/*制造者*/
鼠耳{
锚定。填充:父级
再次点击:{
var crd=映射到坐标(Qt.点(mouseX,mouseY))
控制台日志(crd)
markerModel.append({“latitude”:crd.latitude,“longitude”:crd.longitude})
行添加坐标(crd)
}
}
MapItemGroup{
地图多段线{
id:行
线宽:3
行。颜色:#515151“
}
MapItemView{
添加:转换{}
删除:转换{}
模型:ListModel{
id:markerModel
}
代表:
MapQuickItem{
标识:标记
坐标:QT定位。坐标(纬度、经度)
主播点:Qt.点(markerImage.width*0.5,markerImage.height*0.5)
sourceItem:图像{
id:markerImage
z:5
宽度:30
身高:30
资料来源:index我尝试了几种方法来解决这个问题
此方法不可行,因为事件(drag.onActiveChanged)仅在拖动事件发生时触发
我试图在映射下定义一个DropArea,并调用drag.ondragStarted()函数来触发该事件,但我不知道如何访问委托中的索引,于是我放弃了
成功了!当我在地图上拖动标记时,路径会自动更改!每次标记坐标更改时都会触发事件(onPositionChanged)
谢谢我自己:-)
drag.onActiveChanged: {
if(mouseArea.drag.active) {
line.replaceCoordinate(index, marker.coordinate);
}
}
onPositionChanged: {
line.replaceCoordinate(index, marker.coordinate);
}