Qt 如何在地图上拖动多个目标?

Qt 如何在地图上拖动多个目标?,qt,qml,qtquick2,Qt,Qml,Qtquick2,我想实现一个功能,用户可以在地图上拖动标记(定义为MapQuickItem)并自动更改其路径(定义为MapPolyline)。目前我只能拖动标记,但不知道如何更改其路径 如果我想在地图下定义DropArea并调用MapPolyline.removeCoordinate()函数来更改路径,那么如何访问委托中的索引?我不确定这个想法是否可行 代码如下: Map { id: map anchors.fill: parent plugin: m

我想实现一个功能,用户可以在地图上拖动标记(定义为MapQuickItem)并自动更改其路径(定义为MapPolyline)。目前我只能拖动标记,但不知道如何更改其路径

如果我想在地图下定义DropArea并调用MapPolyline.removeCoordinate()函数来更改路径,那么如何访问委托中的索引?我不确定这个想法是否可行

代码如下:

    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);
    }