在Qt5.6中,如果想让C++部分和JavaScript进行通信,唯一的方法就是使用QWeb频道 http://doc.qt.io/qt-5/qwebchannel.html on a QWeb引擎视图 http://doc.qt.io/qt-5/qwebengineview.html,正如你所说。你这样做在.cpp
file:
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++ 端有一个方法,它返回一个字符串、一个整数、一个 long...这就是它在 C++ 端的样子, 在你的.h
:
Q_INVOKABLE int getInt();
Q_PROPERTY(int myIntInCppSide READ getInt);
现在,你在 JS 端得到这样的 int :
var myIntInJSside= JSobject.myIntInCppSide;
这个解释很简单,推荐大家看看这个视频 https://www.youtube.com/watch?v=KnvnTi6XafA这对我来说非常有用。另外,您可能想阅读更多有关JavaScript API http://doc.qt.io/qt-5/qtwebchannel-javascript.html由 QWebChannel 提供,以及有关的文档QWeb频道 http://doc.qt.io/qt-5/qwebchannel.html.
希望有帮助!