我正在使用 QWebView 并调用 setHtml() 来显示一些 HTML/JavaScript 页面。我使用 QWebFrame::evaluateJavaScript 传递数据更新,方法是向它传递一个包含对 JavaScript 函数(带参数)的调用的 QString。在阅读了 Qt WebKit Bridge 之后,我觉得应该有更好的方法来做他的。我看到了将 C++ 中的 Qt 对象/函数暴露给 JavaScript 的讨论,但不是另一个方向。(我不希望 JavaScript 轮询 C++ 端的更新。)有没有办法将 JavaScript 函数作为插槽连接到 Qt/C++ 信号?(或类似的模式)我觉得我已经浏览了很多文档、发布的问题(甚至是我输入的“类似问题”),但没有看到这样的例子。欣赏任何信息、链接或朝着正确方向轻推。
问问题
1916 次
1 回答
2
使用 addToJavaScriptWindow 对象将您的 C++ 对象公开到 Javascript 层:
page()->mainFrame()->addToJavaScriptWindowObject(QString("myObject"), myObject);
在此处查看文档:http: //qt-project.org/doc/qt-4.8/qwebframe.html#addToJavaScriptWindowObject
这会将您的 C++ myObject 公开为“myObject”。
然后,您可以完全按照您在帖子中查找的内容进行操作,假设 myObject 以下列方式声明了一个信号:
信号:
mySignal(QString aParameter);
您可以简单地将该信号连接到 Web 端的插槽,如下所示:
myObject.mySignal.connect(this, this.mySignalSlot);
在这种情况下,mySignalSlot 应该具有与 C++ 类端的 mySignal 声明相同的签名(嗯,“相同的签名”意味着与未键入 javascript 的参数数量相同,因此您不需要为每个声明类型他们)。
这里真正有用的是传递 JSon 对象。如果您需要传递大量数据,您可以使用 base64 编码。对于图像,QTWebKit 原生支持 QImage 和 QPixmap 类;最后两个被 QTWebKit Bridge 引擎本地编码为复杂的 javascript 对象。
于 2014-10-23T19:43:36.553 回答