最小限の地図 (QML)

Qt Quickを使って地図を表示するための最小限のコードです。

Minimal Mapは、Map を使って地図を表示する方法を示しています。地図を表示するために必要な最小限のコードを示しており、さらなる実験の基礎として使うことができます。

例を実行する

Qt Creator からサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳しくは、Building and Running an Exampleをご覧ください。

C++ コード

main.cpp では、QGuiApplicationQQmlApplicationEngine のクラスだけを使います。

#include <QGuiApplication>
#include <QQmlApplicationEngine>

メイン関数では、まずQGuiApplication オブジェクトをインスタンス化します。次にQQmlApplicationEngine を作成し、Qt Resource System から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 モジュールをインポートしています。次に、トップレベルのウィンドウを作成し、適切なデフォルトサイズを設定し、表示できるようにします。ウィンドウは地図を表示するMap アイテムで満たされます。

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

Plugin アイテムは使用するマッププロバイダを定義するために必要です。この例は、利用可能なジオ・サービス・プラグインのどれでも動作します。しかし、プラグインによっては、正しく機能するために追加のプラグインパラメータが必要な場合があり、PluginParameter を使って指定することができます。この例では、osm プラグインを使用します。これはQt Location Open Street Map プラグインで、パラメータを必要としません。

Map の項目で、使用するplugin を参照し、地図のcenterzoomLevel を設定します。

必要条件

この例では、OpenStreetMap マップタイルをダウンロードするためのインターネット接続が必要です。オプションのシステムプロキシは自動的にピックアップされます。

サンプルプロジェクト @ code.qt.io

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。