在 Qt Creator App 中包含 Web 查看器

Posted

技术标签:

【中文标题】在 Qt Creator App 中包含 Web 查看器【英文标题】:Including a web viewer in Qt Creator App 【发布时间】:2015-09-23 15:25:11 【问题描述】:

我对 Qt 很陌生,我正在尝试将 Web 查看器添加到应用程序中。

我有一个带有 3 个窗口的应用程序和一个带有 3 个按钮的导航栏。当我点击一个按钮时,它会滑动到相关的窗口。

我会让这个按钮之一打开网络查看器,而不退出应用程序。

该应用还必须与移动设备(androidios、Windows Phone)兼容。

我搜索并找到了 QtWebengine,但它并没有真正帮助我......

我正在使用 Qt Creator 3.4.2、Qt 5.5.0 并使用 Qt Designer(不知道这是否重要...)

用 C++ 和 QML 编码。

谢谢。

编辑:我阅读了有关 Webview 文档的信息,但仍然令人困惑...... 我看到有一个Webkit Webview 和一个WbeEngine Webview。 Webkit 已被弃用,所以我想使用 WebEngine。 所以我尝试了使用 WebEngine Webview 的 MiniBrowser 示例,它可以在我想要的平台上运行。 但是我不知道如何通过单击按钮来启动它...

我试过这个:

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(slot_test()));


void MainWindow::slot_test()

    this->webview();


MainWindow::~MainWindow()

    delete ui;

webview.cpp

#include <QtCore/QUrl>

#include <QQmlApplicationEngine>

#include <QtCore/QCommandLineOption>
#include <QtCore/QCommandLineParser>
#include <QGuiApplication>
#include <QStyleHints>
#include <QScreen>

#include <QtQml/QQmlContext>
#include <mainwindow.h> //

#ifdef QT_WEBVIEW_WEBENGINE_BACKEND
#include <QtWebEngine>
#endif /* QT_WEBVIEW_WEBENGINE_BACKEND */

void MainWindow::webview()

#ifdef Q_OS_OSX
    // On OS X, correct WebView / QtQuick compositing and stacking requires running
    // Qt in layer-backed mode, which again resuires rendering on the Gui thread.
    qWarning("Setting QT_MAC_WANTS_LAYER=1 and QSG_RENDER_LOOP=basic");
    qputenv("QT_MAC_WANTS_LAYER", "1");
    qputenv("QSG_RENDER_LOOP", "basic");
#endif /* Q_OS_OSX */

#ifdef QT_WEBVIEW_WEBENGINE_BACKEND
    QtWebEngine::initialize();
#endif /* QT_WEBVIEW_WEBENGINE_BACKEND */

    QQmlApplicationEngine engine;

    engine.load(QUrl(QStringLiteral("qrc:/base/main.qml")));


main.qml

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtWebView 1.0
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2

ApplicationWindow 
    visible: true
    x: 500
    y: 500
    width: 500
    height: 500
    title: webView.title
    statusBar: StatusBar 
        id: statusBar
        visible: webView.loading && Qt.platform.os !== "ios"
        RowLayout 
            anchors.fill: parent
            Label  text: webView.loadProgress == 100 ? qsTr("Done") : qsTr("Loading: ") + webView.loadProgress + "%" 
        
    

    WebView 
        id: webView
        anchors.fill: parent
        url: "https://www.google.fr"
    

(webview.cpp 是 MiniBrowser 示例的简化版本)

当我尝试启动它(在桌面版本或 Android 中)并单击按钮时,Webview 在另一个窗口中打开并立即关闭。 我不知道如何解决这个问题......

【问题讨论】:

在 iOS 和 Android 上使用原生 Qt WebView:doc.qt.io/qt-5/qtwebview-index.html 【参考方案1】:

您可以使用 QtWebKit,但它已被弃用:http://doc.qt.io/qt-5/qtwebkit-index.html

您可以使用 QtWebEngine,但它并不支持您需要的所有平台。

【讨论】:

但我尝试了 Qt 示例 MiniBrowser doc.qt.io/qt-5/qtwebview-minibrowser-example.html,它适用于桌面应用程序、Android 和 iOS。我想在我的应用程序中包含类似的内容。 (可能在 Widget Container 或类似的东西中......) 我不明白你的“但是”。 QtWebKit 提供 WebView API,它可以在您的平台上运行。您需要阅读并使用它。我说 QtWebEngine 不支持所有平台

以上是关于在 Qt Creator App 中包含 Web 查看器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt Creator 的 CMakeLists.txt 中包含头文件?

QT Creator 构建 qml 应用程序

如何在 Mac OS 的发布版本中包含 Qt 库?

Webview 在 Windows 上的 mingw 中无法在 Qt Creator 中工作

嵌入式linux QT开发——QT Creator工程管理

QT creator 如何调用VC写的静态库