我正在使用QWebView并调用setHtml()来显示一些HTML / JavaScript页面。我使用QWebFrame :: evaluateJavaScript传递数据更新,传递一个包含对JavaScript函数(带参数)的调用的QString。在阅读了Qt WebKit Bridge I之后 觉得应该有更好的方法来做他的。我看到将C ++中的Qt对象/函数暴露给JavaScript的讨论,而不是其他方向。 (我不希望JavaScript在C ++方面轮询更新。)有没有办法将JavaScript函数作为插槽连接到Qt / C ++信号? (或者类似的模式)我觉得我已经浏览了很多文档,发布过的问题(甚至是我输入的“类似问题”),但还没有看到这样的例子。欣赏正确方向的任何信息,链接或推动。
答案 0 :(得分: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);
您只需将该信号连接到网络侧的插槽,如下所示:
myObject.mySignal.connect(this,this.mySignalSlot);
在这种情况下,mySignalSlot应该具有与C ++类侧的mySignal声明相同的签名(好吧,"相同的签名"将表示相同数量的参数,因为javascript没有输入,所以你赢了&#39 ; t需要为每个声明一个类型。)
这里真正有用的是传递JSon对象。如果您需要传递大量数据,可以使用base64编码。对于图像,QTWebKit支持本机QImage和QPixmap类;最后两个由QTWebKit Bridge引擎原生编码为复杂的javascript对象。