使用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
相关产品推荐
相关产品推荐

