【问题标题】:Qt Webkit Bridge: C++ access to JavaScriptQt Webkit Bridge:C++ 访问 JavaScript
【发布时间】:2013-03-29 21:37:54
【问题描述】:

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

【问题讨论】:

  • 什么,具体你想做什么?从 C++ >> JS 推送还是反过来?

标签: qtwebkit bridge


【解决方案1】:

使用 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 对象。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多