我正在使用 QWebView 并调用 setHtml() 来显示一些 HTML/JavaScript 页面。我使用 QWebFrame::evaluateJavaScript 传递数据更新,方法是向其传递包含对 JavaScript 函数(带参数)的调用的 QString。在阅读了有关 Qt WebKit Bridge 的内容后,我
感觉应该有更好的方法来做到他的。我看到关于将 C++ 中的 Qt 对象/函数暴露给 JavaScript 的讨论,但没有看到其他方向。 (我不希望 JavaScript 轮询 C++ 端的更新。)有没有办法将 JavaScript 函数作为插槽连接到 Qt/C++ 信号? (或类似的模式)我觉得我已经浏览了很多文档,发布了问题(甚至是我键入此内容时的“类似问题”),但还没有看到这方面的示例。感谢任何信息、链接或正确方向的推动。
使用 addToJavaScriptWindow 对象将 C++ 对象公开到 Javascript 层:
page()->mainFrame()->addToJavaScriptWindowObject(QString("myObject"), myObject);
在这里查看文档:http://qt-project.org/doc/qt-4.8/qwebframe.html#addToJavaScriptWindowObject http://qt-project.org/doc/qt-4.8/qwebframe.html#addToJavaScriptWindowObject
这会将您的 C++ myObject 公开为“myObject”。
然后,您可以准确地执行您在帖子中查找的操作,假设 myObject 按以下方式声明一个信号:
signal:
mySignal(QString aParameter);
您可以简单地将该信号连接到网络端的插槽,如下所示:
myObject.mySignal.connect(this, this.mySignalSlot);
在这种情况下,mySignalSlot 应该与 C++ 类端的 mySignal 声明具有相同的签名(好吧,“相同的签名”意味着与 javascript 未键入的参数数量相同,因此您无需为每个参数声明类型)他们)。
这里真正有用的是传递 JSon 对象。如果您需要传递大量数据,可以使用 Base64 编码。对于图像,QTWebKit 原生支持 QImage 和 QPixmap 类;最后两个由 QTWebKit Bridge 引擎本地编码为复杂的 javascript 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)