【发布时间】:2015-11-02 21:24:32
【问题描述】:
我正在使用 QT WebEngine 框架来显示网页。我在加载页面时将 javascript 注入到页面中,并希望允许 javascript 能够访问 QT 对象。显然,要做到这一点,必须存在一个在铬(javascript)和我的 C++/QT 项目的其余部分之间建立一些 IPC 的 QWebChannel。我遇到了 QWebEnginePage::setWebChannel (QWebChannel *channel) 函数,但是我找不到任何使用它的例子。文档 (http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel) 提到 qt.webChannelTransport 应该在 javascript 上下文中可用,但我看不到在 qwebchannel.js (https://github.com/qtproject/qtwebchannel/blob/dev/src/webchannel/qwebchannel.js) 中建立的位置。我已经看过 WebChannel 示例 (http://doc.qt.io/qt-5/qtwebchannel-examples.html),并希望尽可能避免使用 WebSocket。
以下是我尝试实现网络频道的方法。
每当页面加载时,我都会建立一个通道并在 C++ 中注入 javascript:
QWebChannel *channel = new QWebChannel();
channel->registerObject(QStringLiteral("jshelper"), helper);
view->page()->runJavaScript(qwebjs); //this is qwebchannel.js
view->page()->setWebChannel(channel);
view->page()->runJavaScript(myfunction); //function that calls QT object (jshelper)
在 Javascript 中:
new QWebChannel(qt.webChannelTransport, function(channel) { ... });
这会导致通道未正确连接(假设这是因为 qt.webChannelTransport,因为它在我使用 WebSockets 时正在工作)。任何指向以这种方式使用 QWebEnginePage 设置的 QWebChannel 示例的指针也值得赞赏。
【问题讨论】:
标签: c++ qt qtwebengine qt5.5