Qt for Android 嵌入 WebView 常见问题与解决方案
本文基于 Qt 5.12.4 + Qt Creator 4.9.1 环境,记录在国产平板(Android)上开发 App 时嵌入 WebView 遇到的问题及解决方案。
1. HTML 资源的存储位置问题
项目前端资源包通常包含 assets/css/imgs/js 等文件夹及入口文件 index.html。

结论:将资源包中的文件直接复制到 android/assets 文件夹下即可。不建议在 .pro 文件中操作资源查找和复制,当资源包较大(如 200MB)时,会导致 Qt Creator 构建过程显著变慢。
若项目中包含人脸识别等资源需要打包到自定义文件夹(如 android-src),建议区分处理。资源数量多会导致耗时增加。

2. WebView 访问 HTML 资源的方式
注:Android 环境下不支持 WebEngine,只能使用 WebView。
导入 QtWebView 1.1 后直接设置 WebView 的 url 属性。例如:
webviewComponent.url = "file:///android_asset/index.html"
上述路径走的是 file 协议。在 Android 应用中,assets 文件夹是特殊目录,资源会被打包进 APK。file:///android_asset/index.html 是访问内部 assets 目录的标准方式。
但存在一个问题:从其他应用切回或触发返回事件导致 Activity 生命周期变更后,再次进入可能出现白屏。这是因为系统可能尝试从缓存或不完整的恢复进程中加载固定地址。
结论:在 URL 中加入时间戳,每次加载视为新请求。
webviewComponent.url = "file:///android_asset/index.html?ts=" + Date.now()
该方式高效解决了缓存导致的白屏问题。
3. 侧边快捷栏返回事件拦截
部分平板有侧边栏快捷方式(如滑动退出),存在误触风险。可根据实际场景决定是否屏蔽。

当前使用的平板滑动侧边栏相当于触发一次回退,通过代码拦截可起到保护作用。具体实现根据应用场景调整。

