How to use Qt WebEngine and QWebChannel?

前端 未结 4 1157
孤街浪徒
孤街浪徒 2020-12-03 01:48

I\'m using the new WebEngine to play around and learn. I\'ve been trying to find some similar methods found using Qt WebKit: addToJavaScriptWindowObject()

4条回答
  •  伪装坚强ぢ
    2020-12-03 02:24

    In Qt5.6, if you want to make C++ part and JavaScript to communicate, the only way to do it is using QWebChannel on a QWebEngineView, as you stated. You do it this way in the .cpp file:

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

    Here, you just say that you register an object named TheNameOfTheObjectUsed that will be available on the JS side. Now, this is the part of code to use in the JS side :

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

    Now, if you want to retrieve some properties of the class in the JS side, you need to have a method on the C++ side which returns a string, an integer, a long... This is what it looks like on the C++ side, in your .h:

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

    And now, you get the int like this on the JS side :

    var myIntInJSside= JSobject.myIntInCppSide;
    

    This is a very simple explanation, and I recommend you to watch this video which was very useful to me. Also, you might want to read more about the JavaScript API provided by QWebChannel, as well as the documentation about QWebChannel.

    Hope that helps!

提交回复
热议问题