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

如何在非QML应用中实现QtWebView?(Android平台)

嘿,这个问题我刚好踩过坑!Qt WebView确实在文档里把QML作为默认使用场景,但完全可以在纯Widget的Qt应用(Android平台)里用上它,下面给你两种可行的方案,一步步来:

方案一:在Widget中嵌入QQuickWidget加载WebView QML

这是官方WebView组件的标准用法,虽然绕了点QML,但能完美调用Android原生WebView组件,包体积更小。

1. 配置项目文件(.pro)

首先在你的项目配置文件里添加必要的Qt模块:

QT += widgets webview quickwidgets
  • widgets:基础Widget框架
  • webview:Qt WebView模块
  • quickwidgets:用来在Widget中嵌入QML内容

2. 编写C++代码嵌入QQuickWidget

在你的主窗口代码里,创建QQuickWidget实例,然后加载包含WebView的QML内容:

#include <QApplication>
#include <QMainWindow>
#include <QQuickWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;
    auto quickWidget = new QQuickWidget(&mainWindow);
    
    // 设置QQuickWidget自适应窗口大小
    quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
    
    // 直接编写QML字符串加载WebView,也可以单独写一个.qml文件用setSource加载
    const QString qmlContent = R"(
        import QtQuick 2.15
        import QtWebView 1.15

        WebView {
            anchors.fill: parent
            url: "https://www.example.com" // 替换成你要加载的HTML地址或本地文件
        }
    )";
    
    // 加载QML内容
    quickWidget->setContent(qmlContent.toUtf8(), QUrl("qrc:/"));
    
    mainWindow.setCentralWidget(quickWidget);
    mainWindow.resize(800, 600);
    mainWindow.show();

    return app.exec();
}

3. 配置Android权限

别忘了在AndroidManifest.xml里添加网络权限(如果要加载在线网页):

<uses-permission android:name="android.permission.INTERNET"/>

用Qt Creator的话,可以直接在项目配置的「Android Manifest」模板里添加这行代码。

方案二:直接使用Qt WebEngineView(纯Widget方案)

如果不想碰QML,也可以用Qt WebEngine模块的QWebEngineView,它是原生的Widget组件,不需要依赖QML,缺点是包体积会大一些(自带Chromium内核)。

1. 配置项目文件(.pro)

QT += widgets webenginewidgets

2. 编写C++代码

直接创建QWebEngineView实例并使用:

#include <QApplication>
#include <QMainWindow>
#include <QWebEngineView>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;
    auto webView = new QWebEngineView(&mainWindow);
    
    // 加载网页或本地HTML文件
    webView->load(QUrl("https://www.example.com"));
    
    mainWindow.setCentralWidget(webView);
    mainWindow.resize(800, 600);
    mainWindow.show();

    return app.exec();
}

两种方案都能解决你的问题,看你对包体积和开发复杂度的需求来选~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:07