包括Qt Creator应用程序中的web查看器



我是Qt的新手,我正试图在应用程序中添加一个web查看器。

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

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

该应用程序必须与移动设备(Android, iOS, Windows Phone)兼容。

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

我在Qt Creator 3.4.2, Qt 5.5.0和使用Qt Designer(不知道它是否重要…)

用c++和QML编程。

谢谢。

编辑:我读了关于Webview文档,但它仍然令人困惑…我看到有一个Webkit Webview和一个webengine 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();
}

mainwindow.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)并点击Push Button时,Webview在另一个窗口打开并立即关闭。我不知道如何解决这个问题

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

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

相关内容

  • 没有找到相关文章

最新更新