You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OSM Provider的QtLocation测试应用启动冻结求助

QtLocation OSM Provider Freezes on Ubuntu 22.04 (Qt 5.15.x)

针对Ubuntu 22.04下QtLocation搭配OSM Provider启动后卡死、仅加载少量缓存瓦片的问题,可尝试以下解决方案:

1. 给OSM插件添加网络请求超时与重试参数

Qt 5.15.x在Ubuntu 22.04环境下,OSM插件默认的瓦片请求未设置超时时间,导致网络请求阻塞后无限等待。在Plugin组件中显式配置超时和重试参数:

Plugin {
    id: osmPlugin
    name: "osm"
    PluginParameter {
        name: "osm.mapping.tile.request.timeout"
        value: 5000 // 设置5秒超时
    }
    PluginParameter {
        name: "osm.mapping.tile.request.retries"
        value: 2 // 最多重试2次
    }
}

2. 禁用系统网络代理自动检测

Ubuntu 22.04的默认网络代理配置可能干扰Qt的网络请求,导致瓦片加载卡住。在main.cpp中强制禁用全局代理:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QNetworkProxy> // 新增头文件

int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QGuiApplication app(argc, argv);

    // 禁用全局代理
    QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
    
    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);
    
    return app.exec();
}

3. 检查并安装QtLocation相关依赖库

Ubuntu 22.04升级后可能缺失OSM插件的依赖组件,执行以下命令补充安装:

sudo apt install libqt5location5 libqt5location5-plugin-osm libqt5positioning5

原因说明

Ubuntu 22.04相比20.04,系统网络配置、库版本均有变化,Qt 5.15.x的OSM插件默认行为未适配新环境:

  • 无超时的网络请求遇到阻塞后会无限等待,导致应用卡死;
  • 系统代理自动检测可能让瓦片请求走错误路由,无法正常获取资源;
  • 缺失依赖会导致插件部分功能异常,无法批量加载瓦片。

内容的提问来源于stack exchange,提问作者Pibo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:55:19