3

我正在使用 QWebView 并调用 setHtml() 来显示一些 HTML/JavaScript 页面。我使用 QWebFrame::evaluateJavaScript 传递数据更新,方法是向它传递一个包含对 JavaScript 函数(带参数)的调用的 QString。在阅读了 Qt WebKit Bridge 之后,我觉得应该有更好的方法来做他的。我看到了将 C++ 中的 Qt 对象/函数暴露给 JavaScript 的讨论,但不是另一个方向。(我不希望 JavaScript 轮询 C++ 端的更新。)有没有办法将 JavaScript 函数作为插槽连接到 Qt/C++ 信号?(或类似的模式)我觉得我已经浏览了很多文档、发布的问题(甚至是我输入的“类似问题”),但没有看到这样的例子。欣赏任何信息、链接或朝着正确方向轻推。

4

1 回答 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 回答