gpt4 book ai didi

qtwebkit - Qt Webkit 桥 : C++ access to JavaScript

转载 作者:行者123 更新时间:2023-12-02 02:04:15 25 4
gpt4 key购买 nike

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

最佳答案

使用 addToJavaScriptWindow 对象在 Javascript 层公开你的 C++ 对象:

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 没有类型化,所以你不需要声明类型对于他们每个人)。

这里真正有用的是传递 JSon 对象。如果您需要传递大量数据,您可以使用 base64 编码。对于图像,QTWebKit 原生支持 QImage 和 QPixmap 类;最后两个由 QTWebKit Bridge 引擎原生编码为复杂的 javascript 对象。

关于qtwebkit - Qt Webkit 桥 : C++ access to JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com