PySide2结合QML QtLocation实现地图点击显示圆形反馈的问题
onClicked事件完全可以同时执行多个操作,你页面空白是代码存在多处语法和属性使用错误导致的,具体问题及修复方案如下:
错误点汇总
Plugin属性位置错误:Plugin是Map的专属属性,你当前将其定义在了Map组件外部,属于语法错误,直接导致地图无法加载- Map的
center属性赋值错误:center需要接收coordinate类型值,你写的center: (0, 0)是无效写法 MapCircle的center赋值方式错误:center是属性不是方法,不能用circle.center(坐标)的方式调用,应该用属性赋值语法MapCircle的radius单位错误:MapCircle的radius单位是米,你直接取Map的像素宽度除以10作为半径,数值太小,在zoomLevel=6的视图下完全不可见- 未定义的模型变量:
MapItemView绑定了model: src,但全局没有定义src这个模型变量,会触发运行时错误
修正后的coord_map.qml代码
import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Controls.Material 2.0 import QtQuick.Controls.Universal 2.0 import Fluid.Controls 1.0 import QtLocation 5.6 import QtPositioning 5.6 Item { width: 600 height: 600 Map { id: map anchors.fill: parent zoomLevel: 6 center: QtPositioning.coordinate(0, 0) // 修正center赋值 // 暂时注释未定义src的MapItemView,后续需要使用时自行定义src模型即可 // MapItemView { // model: src // delegate: MapQuickItem { // coordinate: src.position.coordinate // anchorPoint.x: image.width * 0.5 // anchorPoint.y: image.height // sourceItem: Column { // Image { id: image; source: "marker.png" } // Text { text: title; font.bold: true } // } // } // } MapCircle { id: circle radius: 50000 // 单位为米,调整为合适的可见大小 border.width: 1 color: 'green' } // 修正plugin位置,放到Map组件内部 plugin: Plugin { name: "osm" } } MouseArea { id: mouse anchors.fill: parent onClicked: { var clickCoord = map.toCoordinate(Qt.point(mouse.x, mouse.y)) controller.update_from_map(clickCoord) circle.center = clickCoord // 修正为属性赋值语法 } } }
修改后即可正常实现点击地图同时更新坐标输入框、在点击位置显示绿色圆形的需求,Python代码无需修改。
内容的提问来源于stack exchange,提问作者Zach Tait
相关产品推荐
相关产品推荐

