在 Qt 中将 C++ 对象公开给 Javascript

2023-11-25

有什么方法可以将 C++ 对象/函数公开给 Qt 中 QtWebKit 浏览器内运行的 JavaScript?可以将 ActionScript 对象公开给在 Adob​​e AIR 中的 WebKit 浏览器内运行的 JS 代码 - 我正在 Qt 中寻找类似的功能。


编辑:链接正在工作,但以防万一链接再次中断[Link]理查德·摩尔 ...

我在 #qt 和 qt-interest 上看到多次出现的一个问题是如何 将自定义(特定于应用程序的)API 添加到默认可用的 API QtWebKit。正如我将展示的,这实际上非常简单(一旦您知道如何做) 以下。这篇文章将展示一个如何使对象可用的简单示例 来自 javascript,包括调用对象的方法和返回值 来自 C++。

为了执行此操作,您确实需要了解两件事 集成,首先是addToJavaScriptWindowObject()方法 QWebFrame,这允许使指定的 QObject 可见 JavaScript。您需要知道的第二件事是发布的对象 每次清除 javascript 窗口对象时,这种方式都会消失 - IE。每次用户导航到新页面时。为了防止这种情况造成 出现问题时,QWebFrame 会提供一个信号,告诉您该对象何时出现 清除后,您可以重新添加自定义 API。这实际上更简单 比听起来更重要!

其核心实际上是通过示例中的两种方法实现的,它们是 如下图所示:

void MyApi::setWebView( QWebView *view )
{
    QWebPage *page = view->page();
    frame = page->mainFrame();

    attachObject();
    connect( frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()) );
}

void MyApi::attachObject()
{
    frame->addToJavaScriptWindowObject( QString("MyApi"), this );
}

这段代码是您需要的所有代码,以便使所有公共插槽 MyApi 对象对 JavaScript 可见。 MyApi 类提供两个公共槽:

public slots:
    void doSomething( const QString &param );
    int doSums( int a, int b );

第一个槽只是将消息记录到调试输出,第二个槽返回 它的两个参数的总和(是的,槽可以返回东西!)。他们被称为 来自这样的 JavaScript:

  MyApi.doSomething( 'Hello from JS page 2!!!!' );

  sum = MyApi.doSums( 2, 3 );
  alert( 'C++ says the sum is ' + sum );

这就是全部!您可以从 > 下载代码http://xmelegance.org/devel/qtwebkitextension.tar.gz.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Qt 中将 C++ 对象公开给 Javascript 的相关文章

  • 设置 D3 力定向图

    致尊敬的读者 我对 javascript 相当陌生 我也遇到过这个问题 我正在尝试实现这个力导向图的修改版本 http mbostock github com d3 ex force html http mbostock github co
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • Javascript TypeError:无法读取未定义的属性“indexOf”

    在此代码中 我想从cart products array var cart products 17 1 19 1 18 1 var product 17 each cart products function key item if ite
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • 重载算术运算符

    赋值运算符可以声明为 T 运算符 const t 在类中 但不能以这种方式定义算术运算符 它必须是友元函数 我不明白为什么 你能解释一下吗 算术运算符不必须是友元 那么你可以这样定义 MyClass MyClass operator con
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • 如何使用nodejs获取目录中第一个扩展名为.txt的文件?

    我所有文件所在的目录是 usr home jordan 该目录下有很多文件 在目录本身中 但有一个文件以 txt 扩展名命名 使用nodejs和fs 我想将带有txt扩展名的第一个文件 或任何文件 放入 mytxtfilepath 中 我在
  • Img src 路径以及要传递的标头参数

    我在 jsp 页面中有一个 img 标记 其中 src 路径需要传递标头参数才能获取图像 我们怎样才能实现它呢 您现在可以使用fetch https developer mozilla org en US docs Web API Fetc
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 检测 JavaScript 代码中的拼写错误

    在Python世界中 使用最广泛的静态代码分析工具之一 pylint has a 特别检查 https stackoverflow com questions 27162315 automated docstring and comment
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • ng-show 令人不安的 div 布局 - angularJS

    我在用ng show notesOpened 如果notesOpened 变量为true 则隐藏div 然而 当隐藏时 它会扰乱布局 有没有办法让 ng show 的行为与 css 属性相同visibility hidden 以便被隐藏的
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐

  • 角度计时器指令不适用于离子框架

    我在使用离子框架实现角度计时器指令时遇到问题 http siddii github io angular timer 当我使用 Bower 或 google cdn 实现代码时 我没有任何问题
  • remquo 函数有什么作用以及可以用来做什么?

    通读 C 规范我发现了这个函数 double remquo double x double y int quo float remquof float x float y int quo long double remquol long d
  • 不使用 JavaScript 将焦点设置在 EditorFor 上

    是否可以在不使用 JavaScript 的情况下将焦点设置在页面加载时的以下代码上 div class col md 10 Html EditorFor model gt model Description Html ValidationM
  • Java中如何检查线程是否已经启动? [复制]

    这个问题在这里已经有答案了 我正在上一堂延伸课Thread 我会在某个时候启动线程 一段时间后我需要检查该线程是否已经启动 这样我就可以在该特定点启动线程 我的线程类将是 public class BasicChatListener ext
  • java版本错误,无法升级jenkins

    我的 Ubuntu 14 04 上运行着 Jenkins 我正在尝试使用正常的方式升级 jenkinsapt get install jenkins 但是当我尝试这样做时 我不断收到错误 Setting up jenkins 2 73 Fo
  • 如何从 NIB 读取 UITableViewCell(子类)的高度?

    我在 NIB 中定义了一个 UITableViewCell 实际上是一个子类 在 NIB 中 我将框架高度设置为 183 还将 行高 设置为 183 并勾选了自定义 在我最初的问题中 这里一切都出了问题 看起来我得到了错误的高度 单元格加载
  • 使用 1 个选项取消选择“多选”中的所有选项

    我目前有以下js代码 function clearMulti option var i var select document getElementById option parentNode id for i 1 i
  • 在 Spring Data Rest 中修改 @OneToMany 实体而不使用其存储库

    在我的项目中我使用对象类型A与类型的对象具有 OneToMany 关系 orphanRemoval true cascade CascadeType ALL fetch FetchType EAGER B 我需要 SpringDataRes
  • 如何向 API 提供“回调”? [复制]

    这个问题在这里已经有答案了 我正在读一些模块文档在方法参数的解释中看到一些我不明白的东西 callback 将使用参数调用的回调函数 列表等于callbackargs result 计算完成后 callbackargs 回调函数的附加参数
  • 如何更改 R 中的分辨率(或重新网格)数据

    我有一个数据集 其中包含 lon lat 和涵盖 1961 年至 1970 年的月平均变量 例如温度或降水 该数据集的分辨率为 0 5 x 0 5 度经 纬度 覆盖整个地球 并以 我使用 R 提取数据的 NC 文件 library ncdf
  • 如何将控制台输出写入cpp中的文本文件?

    我正在尝试将控制台数据写入 cpp 中的单独文本文件中 任何人都可以帮我提供示例代码 有多种方法可以做到这一点 您可以使用以下命令从命令行重定向它programname gt out txt 或者你可以使用freopen out txt w
  • 制作不重叠的气泡图

    我目前正在尝试在 Matplotlib 中制作气泡图 其中气泡不重叠 因此将圆圈 气泡包装在图表中 大约像 我认为可能有效的方法 使用 x 1 y 1 绘制第一个数据点 通过计算给定标量值的气泡半径来随机绘制其他数据点以避免重叠 The f
  • 有关 JFreeChart 叠加的帮助

    我遇到了 JFreeChart 重叠图的问题 我正在使用 JFreeChart 1 0 13 我想要做的事情似乎在 JFreeChart 的早期版本中更容易做到 该图显示折线图和条形图 折线图绘制的 Y 轴数据范围为 0 100 范围 条形
  • 如何简化嵌套map调用?

    假设我有一些嵌套函子 例如List Option Int 并需要致电map最内在的一个 现在我正在使用嵌套maps scala gt val opts List Option Int List Some 0 Some 1 opts List
  • nodemailer 无效登录:535 身份验证失败

    我正在尝试在我的节点应用程序中使用nodemailer npm 包 通过联系页面发送电子邮件 它给我这个 535 身份验证失败错误 但我可以向您保证我的电子邮件和密码绝对正确 var express require express var
  • Rails 3 自动资产部署到 Amazon CloudFront?

    Rails 3 1 中是否有可用的 gem 或方法可以自动将资产上传到亚马逊云前端并使用这些资产而不是提供本地托管的资产 我想手动上传编译的资产然后更改 Rails 应用程序配置以使用该资产主机很容易 但是当修改资产时 需要再次手动上传到云
  • 设置 templateLocation 参数时数据流作业运行失败

    当我传递参数暂存 临时和输出 GCS 存储桶位置时 数据流作业失败并出现以下异常 Java代码 final String used Arrays copyOf args args length 1 used used length 1 pr
  • 防止在 Vim 中打开 NERDTree 或 MiniBuffExplorer 窗口内的文件

    我发现自己在 Vim 中打开了错误的窗口 有时是 NERDTree 或 MiniBuffExplorer 这真的让我很失望 我确信这种情况正在发生 因为我的光标错误地聚焦在这些窗口之一内 但是有什么我可以添加到我的 vimrc文件来防止这种
  • Postfix - 如何处理传入的电子邮件? [关闭]

    Closed 这个问题是无关 目前不接受答案 有人知道如何在 postfix 中处理虚拟邮箱的传入电子邮件吗 我正在构建 Web 应用程序 用户通过向应用程序发送电子邮件来添加新内容 每个用户使用的电子邮件地址是自定义的 例如 电子邮件受保
  • 在 Qt 中将 C++ 对象公开给 Javascript

    有什么方法可以将 C 对象 函数公开给 Qt 中 QtWebKit 浏览器内运行的 JavaScript 可以将 ActionScript 对象公开给在 Adob e AIR 中的 WebKit 浏览器内运行的 JS 代码 我正在 Qt 中