Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt位置编辑地图多段线_Qt_Qml_Qtlocation - Fatal编程技术网

Qt位置编辑地图多段线

Qt位置编辑地图多段线,qt,qml,qtlocation,Qt,Qml,Qtlocation,我的目标是允许用户使用鼠标在地图多段线上拖放点来编辑地图多段线。我通过创建一个C++模型来实现,它公开了强> PATH()/Sturial>方法,用于抛出所有点来画线。 然后,我使用该模型为直线上的每个顶点显示一组贴图圆。这些Mapcircles具有拖动事件,这些事件会在拖动完成后更新MapPolyLine模型 这适用于顶点数小于500的直线。然后表现就很糟糕了。我的一些线(来自GPX文件)有10000个顶点 所以我尝试只在靠近鼠标悬停点的线上显示MapCircles。但是(除非我弄错了),Ma

我的目标是允许用户使用鼠标在地图多段线上拖放点来编辑地图多段线。我通过创建一个C++模型来实现,它公开了<>强> PATH()/Sturial>方法,用于抛出所有点来画线。 然后,我使用该模型为直线上的每个顶点显示一组贴图圆。这些Mapcircles具有拖动事件,这些事件会在拖动完成后更新MapPolyLine模型

这适用于顶点数小于500的直线。然后表现就很糟糕了。我的一些线(来自GPX文件)有10000个顶点

所以我尝试只在靠近鼠标悬停点的线上显示MapCircles。但是(除非我弄错了),MapPolyLine的鼠标earea似乎是线条的边界框,在奇怪的情况下可能会触发悬停

我发现onenterned事件运行得很好,足以让我计算出线上的位置,然后在该位置附近显示一组地图圈。但这是一个次优解决方案,因为用户必须主动单击线条才能显示这些地图圈

我的问题是:“我是否使用了正确的策略来允许编辑贴图多段线?”。在当前的QtLocation实现中,我看不到任何其他方法

代码现在相当复杂。它的结构是:-


GPXModel {
    id: gpxModel
}

MapPolyLine {

    path: gpxModel.path
    MouseArea {
      onEntered: {
           var mapCoord = gpxLine.mapToItem(mapView,mouseX,mouseY);
           var coord = mapView.toCoordinate(Qt.point(mapCoord.x,mapCoord.y));
           //tell the model where we are in the array of points so we can display MapCircles around this point
           gpxModel.setEditLocationFromCoordinate(coord);
       }
    }
}

MapItemView {
    model: gpxModel
    MapCircle {
        //this is a custom role I use to return a sub-set of points set by setEditLocationFromCoordinate
        center: positionRole
        MouseArea{
           anchors.fill: parent
           drag.target: parent
           onDragActiveChanged: {

            if(!drag.active){
                gpxModel.updatePositionOfMarker();
            }
        }
        }
    }

}
这个项目是开源的,但有一点需要注意,我把它作为一个学习练习,所以它是有点乱七八糟的


编辑:我不想使用基于webview的解决方案。该项目的重点是在本机Qt中实现这一点,同时尽量不依赖第三方javascript库/浏览器。

请在您的应用程序中提供一种方法,以便轻松创建这样一条有问题的线条。当我加载它时,它看起来很平滑。当我按edit时,应用程序会在短时间后崩溃