Windows 上 Webview 的 Qt QML 后备组件
Posted
技术标签:
【中文标题】Windows 上 Webview 的 Qt QML 后备组件【英文标题】:Qt QML fallback component for Webview on Windows 【发布时间】:2021-08-21 14:04:23 【问题描述】:我正在尝试使用 Qt 5.15.2 创建适用于 android 和 Windows 的跨平台应用程序。对于 Windows,我使用的是 MinGW 64 位编译器。 我想在应用程序的 Android 版本中加入一个 WebView QML 组件。但知道 MinGW 与 QtWebView 不兼容,我还想为 Windows 版本提供一个后备组件。对我来说,两个平台都只有一个 QML 文件很重要。 为此,我尝试根据运行时检测到的操作系统动态实例化 WebView 或后备标签:
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
Column
property var createdObject
Component.onCompleted:
if(Qt.platform.os=="android")
createdObject=Qt.createQmlObject(
"import QtWebView 1.1
WebView
",
embedContainer
);
else //on Windows
createdObject=Qt.createQmlObject(
"import QtQuick.Controls 1.4
Label
",
embedContainer
);
Item
id: embedContainer
这在 Windows 上运行良好。但是,在 Android 上,组件创建失败并出现以下错误:错误:Qt.createQmlObject():创建对象失败: qrc:/inline:1:18: 未安装模块“QtWebView”
所以我尝试添加“import QtWebView 1.1”作为代码sn-p的第三行。然后它可以在 Android 上运行,但当然 Windows 会抱怨“module QtWebView is not installed”,并且无法显示标签。
我应该如何修改我的代码以使其在两个平台上都能按预期工作?非常感谢您的帮助。
【问题讨论】:
【参考方案1】:如果您使用qmake
构建项目,则需要在.pro
文件中添加webview
模块。
QT += webview
由于您正在为 Android 和 Windows 构建相同的项目,而 WebView
模块在 Windows 中不可用,您需要将它放在一个测试块中,例如:
!win32
QT += webview
表示如果目标平台不是Windows,则添加webview
模块。
【讨论】:
感谢您的回答。这确实是我的 .pro 文件的配置方式,我认为那里没有问题以上是关于Windows 上 Webview 的 Qt QML 后备组件的主要内容,如果未能解决你的问题,请参考以下文章
Webview 在 Windows 上的 mingw 中无法在 Qt Creator 中工作