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 中工作

qt lrelease windows 二进制文件?

在 translations.qrc 文件中读取翻译器文件 .ts/.qm

如何修改Qt标准对话框的文字

QT实多国语言切换

Qt 本地化(翻译)