[英]QT 5.8 how does Webview do a request and how can I intercept it?
我正在嘗試將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 。 您可以注冊自己的工廠,讓自己的班級處理網絡。 您可以重載get方法並在url與google相匹配的情況下更改標題,或執行以下操作:
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
注冊自己的NetworkAccessManagerFactory的示例:
http://doc.qt.io/qt-5/qtqml-networkaccessmanagerfactory-example.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.