如何在 QML 中设置正确的路径到离线 OSM 目录(不使用 qrc)?

Posted

技术标签:

【中文标题】如何在 QML 中设置正确的路径到离线 OSM 目录(不使用 qrc)?【英文标题】:How to set proper path to offline OSM directory in QML ( not using qrc )? 【发布时间】:2021-08-29 20:30:22 【问题描述】:

我想在带有 .exe 的文件夹中拥有带有磁贴 realTiles 的文件夹。

我当然可以将文件夹添加到 qrc 中,一切正常:

import QtQuick 2.10
import QtQuick.Window 2.11
import QtLocation 5.12
import QtPositioning 5.12
...
Map 
        id: map
        anchors.fill: parent
        activeMapType: map.supportedMapTypes[0]
        zoomLevel: 14
        plugin: Plugin 
            name: 'osm';
            PluginParameter 
                name: 'osm.mapping.offline.directory'
                value: ':/realTiles/'
            
        
    

所以我将文件夹realTiles 复制到带有.exe 的文件夹和.exe 上方的文件夹一。例如,我在这 2 个位置有文件夹 realTiles

C:/Users/tom/Desktop/app/build-OsmOffline-Desktop_Qt_5_15_1_MinGW_64_bit-Release/release/realTiles C:/Users/tom/Desktop/app/build-OsmOffline-Desktop_Qt_5_15_1_MinGW_64_bit-Release/realTiles

我尝试使用插件参数的值:

value: 'file:///' + applicationDirPath + '/../realTiles/'
value: 'file:///realTiles/'
value: 'file:/realTiles/'

还有很多其他的。我当然可以做错。什么是真正的解决方案?

编辑:

main.qml


import QtQuick 2.10
import QtQuick.Window 2.11
import QtLocation 5.12
import QtPositioning 5.12
Window 
    id: win
    objectName: "window"
    visible: true
    width: 512
    height: 512

    Map 
        id: map
        anchors.fill: parent
        activeMapType: map.supportedMapTypes[0]
        plugin: Plugin 
            name: 'osm';
            PluginParameter 
                name: 'osm.mapping.offline.directory'
                //value: ':/realTiles/'
                value: 'file:///' + applicationDirPath + '/../realTiles/'
            
        
    


main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QStandardPaths>
#include <QQmlContext>
int main(int argc, char *argv[])

    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("applicationDirPath", QGuiApplication::applicationDirPath());
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();

【问题讨论】:

【参考方案1】:

尝试给出完整路径

        PluginParameter 
            name: "osm.mapping.cache.directory"
            value: "C:/Users/UserName/Desktop/OSMCache"
        

我试图更改它工作的缓存目录。因此,请在 value 字段中提供完整路径。

【讨论】:

以上是关于如何在 QML 中设置正确的路径到离线 OSM 目录(不使用 qrc)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QML 中设置鼠标光标位置

如何在 QML 中设置 MessageDialog 的默认按钮?

QML/OSM。如何显示圆圈?

如何在 QtWebEngine QML 应用程序中设置用户代理

如何在 Qt QML (QtQuick 2) 中设置 Material Dark Theme?

在 QML 中使用离线交互式地图