我正在使用新的WebEngine来玩和学习。我一直在尝试使用Qt WebKit找到一些类似的方法:addToJavaScriptWindowObject()
我发现使用Qt WebEngine,我必须使用QWebChannel
将函数注册到Javascript窗口对象。如果这是正确的,它将带我到以下问题。
我在我的电脑上安装了Qt 5.4.0。我注意到在我的计算机上安装的SDK中找不到qwebchannel.js
。我在Git源代码中找到了它。
如果我有一个带有QWebEnginePage
和QWebEngineView
的Qt原生桌面应用程序,我需要能够在Javascript窗口对象上注册函数吗?
我的桌面应用程序自动导航到我创建的http页面。所以我可以访问连接到QWebEngineView
的内容。
采取了哪些措施让我可以做到这一点?
在Qt5.6中,如果你想让C ++部分和JavaScript进行通信,唯一的方法就是在QWebChannel上使用QWebEngineView,如你所说。你在.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;
这是一个非常简单的解释,我建议你观看对我来说非常有用的this video。此外,您可能想要阅读有关QWebChannel提供的JavaScript API的更多信息,以及有关QWebChannel的文档。
希望有所帮助!
Qt现在有这方面的文件:
Qt WebChannel Standalone Example
您必须将QWebSocketServer
添加到您的cpp应用程序,QWebEngineView
的HTML / Javascript将使用WebSocket连接到该应用程序。然后使用QWebChannel
进行双向通信。