18

私は新しい WebEngine を使って遊んだり学んだりしています。Qt WebKitを使用して見つかった同様の方法をいくつか見つけようとしています:addToJavaScriptWindowObject()

Qt WebEngine を使用するQWebChannelと、JavaScript ウィンドウ オブジェクトに関数を登録するために を使用する必要があることがわかりました。これが正しければ、次の質問に進みます。

コンピューターに Qt 5.4.0 をインストールしました。qwebchannel.js私のコンピューターにインストールされている SDK にそれが見つからないことに気付きました。Gitソースで見つけました。

と を使用した Qt ネイティブ デスクトップ アプリケーションがある場合、JavaScript ウィンドウ オブジェクトに関数を登録するQWebEnginePageQWebEngineViewは何が必要ですか?

私のデスクトップ アプリケーションは、作成した http ページに自動的に移動します。に接続されているコンテンツにアクセスできますQWebEngineView

これを機能させるには、どのような手順を踏む必要がありますか?

4

4 に答える 4

19

Qt5.6では、C++の部分とJavaScriptを通信させたい場合、あなたが述べたようにQWebEngineViewQWebChannelを使用するしかありません。ファイルで次のようにします。.cpp

m_pView = new QWebEngineView(this);
QWebChannel * channel = new QWebChannel(page);
m_pView->page()->setWebChannel(channel);
channel->registerObject(QString("TheNameOfTheObjectUsed"), this);

TheNameOfTheObjectUsedここでは、JS 側で使用できるという名前のオブジェクトを登録するだけです。さて、これはJS側で使用するコードの一部です:

new QWebChannel(qt.webChannelTransport, function (channel) {
            // now you retrieve your object
            var JSobject = channel.objects.TheNameOfTheObjectUsed;
        });

さて、JS 側でクラスのいくつかのプロパティを取得したい場合は、C++ 側に文字列、整数、長整数型を返すメソッドが必要です... これは C++ 側ではどのように見えるかです、あなたの.h

Q_INVOKABLE int getInt();
Q_PROPERTY(int myIntInCppSide READ getInt);

そして今、JS 側で次のような int を取得します。

var myIntInJSside= JSobject.myIntInCppSide;

これは非常に簡単な説明です。私にとって非常に役立つこのビデオをご覧になることをお勧めします。また、 QWebChannel が提供するJavaScript APIや、 QWebChannelに関するドキュメントについても読みたいと思うかもしれません。

それが役立つことを願っています!

于 2016-04-13T14:13:21.093 に答える
0

Qtにはこれに関するドキュメントがあります:

Qt WebChannel スタンドアロンの例

の HTML/Javascript が WebSocket を使用して接続するQWebSocketServercpp アプリにを追加する必要があります。QWebEngineView次にQWebChannel、双方向通信に使用します。

于 2015-12-02T18:02:21.377 に答える