最小地图(QML)
使用Qt Quick显示地图的最小代码。
最小地图演示了如何使用地图项来渲染地图。它展示了显示地图所需的最小代码,可以作为进一步实验的基础。
运行示例
要从Qt Creator中运行示例,请打开欢迎模式并从示例中选择示例。有关更多信息,请访问构建和运行示例。
C++代码
在main.cpp
中,我们只使用了QGuiApplication和QQmlApplicationEngine类。
#include <QGuiApplication> #include <QQmlApplicationEngine>
在主函数中,我们首先实例化一个QGuiApplication对象。然后我们创建一个QQmlApplicationEngine,并告知它从Qt资源系统加载main.qml
。
最后,QGuiApplication::exec()启动主事件循环。
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }
QML代码
在main.qml
中,我们导入了QtLocation QML模块及其依赖的QtPositioning QML模块。接着,我们创建顶层窗口,设置合理的默认大小,并使其可见。窗口将被显示地图的地图项填充。
import QtQuick import QtLocation import QtPositioning Window { width: Qt.platform.os == "android" ? Screen.width : 512 height: Qt.platform.os == "android" ? Screen.height : 512 visible: true title: map.center + " zoom " + map.zoomLevel.toFixed(3) + " min " + map.minimumZoomLevel + " max " + map.maximumZoomLevel Plugin { id: mapPlugin name: "osm" } Map { id: map anchors.fill: parent plugin: mapPlugin center: QtPositioning.coordinate(59.91, 10.75) // Oslo zoomLevel: 14 property geoCoordinate startCentroid PinchHandler { id: pinch target: null onActiveChanged: if (active) { map.startCentroid = map.toCoordinate(pinch.centroid.position, false) } onScaleChanged: (delta) => { map.zoomLevel += Math.log2(delta) map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position) } onRotationChanged: (delta) => { map.bearing -= delta map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position) } grabPermissions: PointerHandler.TakeOverForbidden } WheelHandler { id: wheel // workaround for QTBUG-87646 / QTBUG-112394 / QTBUG-112432: // Magic Mouse pretends to be a trackpad but doesn't work with PinchHandler // and we don't yet distinguish mice and trackpads on Wayland either acceptedDevices: Qt.platform.pluginName === "cocoa" || Qt.platform.pluginName === "wayland" ? PointerDevice.Mouse | PointerDevice.TouchPad : PointerDevice.Mouse rotationScale: 1/120 property: "zoomLevel" } DragHandler { id: drag target: null onTranslationChanged: (delta) => map.pan(-delta.x, -delta.y) } Shortcut { enabled: map.zoomLevel < map.maximumZoomLevel sequence: StandardKey.ZoomIn onActivated: map.zoomLevel = Math.round(map.zoomLevel + 1) } Shortcut { enabled: map.zoomLevel > map.minimumZoomLevel sequence: StandardKey.ZoomOut onActivated: map.zoomLevel = Math.round(map.zoomLevel - 1) } } }
插件项是必要的,以便定义我们打算使用的地图提供者。此示例可以与任何可用的地理服务插件一起工作。然而,某些插件可能需要额外的插件参数才能正确运行,我们可以使用PluginParameter来指定它们。在此示例中,我们使用osm
插件,它是一个Qt Location Open Street Map Plugin,不需要任何参数。
在地图项中,我们引用了我们使用的插件
,并设置了地图的中心
和缩放级别
。
要求
该示例需要有效的互联网连接来下载OpenStreetMap
地图瓦片。系统代理将被自动选择(如果有的话)。
© 2024 Qt公司有限公司。本文档中包含的文档贡献均属各自所有者的版权。提供的文档由自由软件基金会出版,并受GNU自由文档许可协议第1.3版的条款约束。Qt及其相关商标为芬兰及其它在世界各地的Qt公司有限公司的商标。所有其他商标均为各自所有者的财产。