QT 5.8 WebView如何执行请求以及如何拦截它



我试图将qnetworkrequest传递到我的main.qml文件中的WebView而不是" URL"。我通过引用WebView对象和SetProperty函数传递URL。但是,还没有找到正确的功能,也不知道从哪里开始以创建新功能或修改现有的WebView代码以使其工作。是否有一种方法可以将源代码编辑为.QML文件中的WebView。当然,我只是在学习QT框架。

我尝试了WebEngineView,但是WebView在加载页面时要快得多。这对于应用程序至关重要

我想真正的问题是Webview如何执行请求,如何拦截它?

main.qml

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

ApplicationWindow {

    flags: Qt.FramelessWindowHint
    visible: true
    x: 600   
    y: 400
    width:  500      
    height: 500 
    title: webView.title
    WebView {
        id: webView
        anchors.fill: parent
        objectName: "webView"
       //setting this value through main.cpp
       // url: "https://www.google.com"

        onLoadingChanged: {
            if (loadRequest.errorString)
                console.error(loadRequest.errorString);
        }
    }
}

main.cpp

     int main(int argc, char *argv[])
        {
            QGuiApplication app(argc, argv);
            QtWebView::initialize();
            QQmlApplicationEngine engine;
//How to Pass THIS request to the webview instead of url?
 QNetworkRequest request;
 request.setUrl(QUrl("http://google.com"));
 request.setRawHeader("Accept-Charset", "UTF-8,*;q=0.5");
            engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
            QObject *rootObject = engine.rootObjects().first();
            QObject *qmlObject = rootObject->findChild<QObject*>("webView");


//Able to set the URL for the webView:
        qmlObject->setProperty("url", "https://www.google.com" );  
            return app.exec();
        }

afaik,所有qml组件均使用qnetworkAccessManager。您可以注册自己的工厂以让自己的班级处理网络。如果URL匹配Google或您想做的任何事情,则可以超载GET方法并更改标头:

class MyNetworkManager : public QNetworkAccessManager {
public:
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request) {
    if (request.url.contains("google")) {
        request.setRawHeader("Accept-Charset", "UTF-8,*;q=0.5");
    }
    return QNetworkAccessManager::get(request)
}
}

当然,这里的request是const,所以您必须构建一个新请求,但我希望这显示出基本的想法!

如何在main.cpp中注册您自己的网络AccessManagerFactory的示例:

http://doc.qt.io/qt-5/qtqml-networkaccessmanagerfactory-example.html

相关内容

  • 没有找到相关文章

最新更新