【问题标题】:What is the best way to implement a inter-qwebview communication?实现 qwebview 间通信的最佳方式是什么?
【发布时间】:2013-04-18 18:36:58
【问题描述】:

概览:

我正在尝试创建一个模仿类似 WebIntents 功能的 PoC 应用程序。 因此,在我的 Qt 应用程序中,我创建了两个 QWebviews 来启动两个不同的 webApp。现在让我们称它们为应用 A 和 B。

场景:

  • 主应用程序创建两个 QWebView,每个都启动一个应用程序,即 AppA、AppB。
  • 应用 A 被编程为通过 AJAX 自动获取一些数据。
  • App B 也需要部分数据。 AppB 仅显示一个名为 . 注意:由于 AppA 已经拥有该信息,我希望 AppB 在启动 QWebView 时调用通过 addToJavaScriptWindowObject() 方法调用注入到它的 (appB) DOM 中的 JavaScript API。
  • App-A 完成了 Ajax 调用并在其 WebView 中指示完成。
  • 用户点击AppB中的按钮,
  • 应用 B 调用该 JavaScript API,即 fetcData({source: "AppA");
  • 现在控件在 QT 世界中:

问题:控件在 AppB 的上下文中,我应该如何与 AppA 中的 WebView 进行通信——即 AppB 询问 AppA:嘿 AppA,请给我您获取的数据?

信号和插槽可以在这里帮助我吗?或者我应该使用其他形式的 IPC。

我阅读了这个页面:http://qt-project.org/doc/qt-4.8/qtwebkit-bridge.html,但我仍然没有得到解决问题的提示。

另一个相关的问题:QWebViews 是在它们自己的线程中创建的吗?

【问题讨论】:

    标签: qt qwebview


    【解决方案1】:

    难道你不能只是 emit 来自 AppB 的某种 signal 基本上说,“嘿,如果有人想要,我已经完成了我的数据获取”还是我错过了什么?它会发生在AppB::fetchData() 的末尾。

    之后您要做的就是将任何感兴趣的对象连接到该信号。

    【讨论】:

    • 对不起,我的问题中有一个错字,我刚刚改正了。
    • AppB 暂时不需要这样的信号。因为它是一个概念验证。我没有让 AppA 发出“数据就绪”“完成获取”类型的信号。因此用户(即我)将单击 AppB 上的按钮以通过 QT 获取数据。这将在看到 AppA 的 QWebView 填充了获取的数据时完成。
    • 所以在这种场景下,AppB需要获取AppA的WebView的句柄,并调用一个方法AppB::fetchData(in QT-CPP)。这个方法又需要调用AppB的QWebView的JavaScript代码,里面有数据!我不完全确定如何做到这一点。
    • 由于控制权回到主窗口,您可以简单地将 AppA 的地址传递给AppB::fetchData(MyWebView* app_ptr),然后使用app_ptr 访问您需要的任何 AppA 成员。
    • 如果您确实将来自 AppA 的 dataFetched() 信号连接到 AppB 中的插槽,您可以使用 QObject::sender(); 在 AppB 的插槽中完成相同的操作;
    猜你喜欢
    • 2017-11-19
    • 2015-08-10
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多