2017-02-21 9 views
0

"url"ではなく、main.qmlファイルにあるWebViewにQnetworkRequestを渡そうとしています。 webViewオブジェクトとsetproperty関数を参照してurlを渡します。しかし、正しい機能が見つからず、新しい機能を作成したり、既存のWebViewコードを修正してこれを機能させるためには、どこから起動するのかが分かりません。 .qmlファイルのWebViewにソースコードを編集する方法はありますか?もちろん、私はQTフレームワークを学んでいます。QT 5.8どのようにWebviewがリクエストを行い、どうやってそれを傍受できますか?

私は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(); 
     } 
+0

どのようにQMLから変更されたURLの取り扱いについて '' WebView'''が変更された 'の' '' url'''プロパティ? '' 'onUrlChanged:{...}' '' –

答えて

0

私の知る限り、すべてのQMLのコンポーネントがQNetworkAccessManagerを使用しています。独自のファクトリを登録して、独自のクラスでネットワークを処理することができます。あなたはget methodをオーバーロードし、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

関連する問題