问题标签 [qtwebchannel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
462 浏览

javascript - QWebChannel 向 JavaScript 发送空的 QVariant POD 结构

我正在编写一个 C++ QWidget 应用程序,它与在资源托管网页中运行的 JavaScript 进行通信。我需要找到一种方法将以下 POD 结构的数组发送到网页中托管的 JavaScript 函数,但不幸的是,数据总是以空数组的形式结束。我认为这个问题类似于这个问题- 但这也没有答案。

自定义 POD 结构(我需要发送这些列表(QVariantList))是:

用作通知程序的 IPC 类如下:

上面的想法是,当

我发现的最接近我想要实现的示例是基于 QT Widget 的 JavaScript Chart.js应用程序,它生成随机图表列并更新在网页中运行的图表。

在 QT C++ Widget 应用程序和 JavaScript 之间获得 IPC 通信的关键是在两端 初始化一个QWebChannel 。

C++方面,这基本上是:

构造函数如下:

JavaScript方面(这是我的整个 HTML 文件)

此外,在 C++ 端,我们将QWebEngineView中的页面设置为显示 Web 内容的 Gui 布局。这些需要提前初始化,通过已建立的 QWebChannel 异步流向插槽的信号。就我而言,我只关心通过QVariant对象从 C++ 端向 JavaScript 端发送自定义 POD 结构。

为了使用 QVariant 的自定义数据结构 - 或者在我的情况下是 QVariantList 的 - 我们需要使用 QT 注册自定义类型 - 作为一种元 rtti 注册。如果没有这个,javascript 插槽函数var updateMap将无法从 POD 的字段中解码类型信息。

0 投票
0 回答
483 浏览

javascript - 如何在没有 async/await 支持的情况下等待异步 javascript 函数?

这与从 to 移植Qt Webkit有关Qt Webengine。以下代码在 webkit 中运行良好。

但是 webengine 的情况发生了变化。

使其工作的一种方法如下所示。

但是js代码有几万,老的浏览器客户端一改就不行了。 我只想对同步调用进行异步调用。

当我找到 时,情况变得更好async/await in ES7,但这不是解决方案。

```

如你看到的,

(1)我必须使我所有的 js 代码异步,这是同步的,导致订单脚本乱序。

(2)基于 qt webkit 的旧浏览器客户端也不行,因为它可能不支持async/await.

那么,如何在没有 async/await 支持的情况下等待异步 javascript 函数呢? 有了它我可以

(1) 不需要更改任何现有的 js 代码。浏览器客户端可以注入新的 js 代码来改变异步函数行为。

(2)新浏览器客户端和旧浏览器客户端同时工作。

欢迎任何提示。提前致谢。

0 投票
0 回答
95 浏览

qtwebengine - 来自子帧的 qt.webChannelTransport

是否可以从子框架中使用 qt.webChannelTransport?似乎 QWebEnginePage.setWebChannel 只在顶部框架中创建 qt.webChannelTransport 对象。我考虑过尝试注入脚本来处理跨文档消息,然后在主框架和 qt 应用程序之间使用 Qt WebChannel,但这似乎很痛苦。

0 投票
1 回答
496 浏览

python - 消除 QWebChannel 属性通知器信号警告

我正在使用QWebEngineViewwith QWebChannel,类似于:

然后我打电话:

一切运行正常。但是,然后我会收到这样的日志垃圾邮件:

...
对象'AppView'的属性'title''没有通知信号并且不是恒定的,HTML中的值更新将被破坏!
对象 'AppView' 的属性 'url'' 没有通知信号并且不是常量,HTML 中的值更新将被破坏!
对象 'AppView' 的属性 'selectedText'' 没有通知信号并且不是常量,HTML 中的值更新将被破坏!
对象 'AppView' 的属性 'hasSelection'' 没有通知信号并且不是常量,HTML 中的值更新将被破坏!
对象 'AppView' 的属性 'zoomFactor'' 没有通知信号并且不是常量,HTML 中的值更新将被破坏!
...

这些似乎是QWebEngineView已被拉入的派生类的属性。有没有办法正确派生它,或者整个结构是否需要更改以便我不拉入QWebEngineView

AppView在 JS 代码中需要其他的信号和槽。

0 投票
0 回答
556 浏览

c++ - 从远程客户端应用程序控制在嵌入式设备上运行的 Qt/C++/QML GUI 应用程序?

场景: 我们有一个 Qt 应用程序(Qt 5.9.5,C++,QML,Ubuntu)在设备上运行(处理电信),也可以使用 webserver 在浏览器中查看。在设备上手动完成的所有操作都已同时在浏览器上可视化。

需求:现在我们想要实现的是构建一个类似的应用程序(可能是Web应用程序),以便您从浏览器执行它,同时设备上的应用程序应该自己执行。该设备最初只是打开。一切都应该从客户端应用程序进行操作。有哪些可能的选择?

我们已经开始使用 Qt Remoteobjects来制作远程应用程序,但与远程对象模块中某些功能的 Qt 版本相比,Qt 版本的设备更旧。所以现在无法使用远程对象。

Qt WebGL流在这种情况下有用吗?

QtWebchannelwebsockets是否通过设置与html/javascript应用程序的通信来提供帮助。这是一个可能的解决方案吗?

虚拟网络计算 ( VNC ) 是否可以在我的场景中考虑?

我遇到了一些概念,例如 Qt for WebAssembly、Web toolkit( Wt )、EmscriptenCutelyst web-framework、Qt for Automation - MQTT、OPC UA、KNX、CoAP。在开发客户端应用程序以控制电信上的QML GUI时,这些确实有帮助。设备?

哪个选项适合我的情况?我一直在关注关于这些相关主题的 Qt 博客。仍然不确定哪种方法适合?

抱歉,解释冗长。请提供一些建议。

谢谢你。

0 投票
1 回答
1655 浏览

javascript - 如何使用 QWebChannel 从 python 接收数据到 js?

我试图让我的 PyQt 应用程序与 JS 通信,但无法从 python 获取值。我在 python 端有两个插槽来获取和打印数据。在示例中,一个 int 从 JS 传递给 python,python 将 5 添加到它并传递回来,然后 JS 调用另一个插槽来打印新值。

输出:

预期的:

我无法弄清楚为什么返回的值为空。我如何将该 pyval 存储到 js 端的变量中以供以后使用?

0 投票
1 回答
324 浏览

python - 在 javascript 中实例化 QWebChannel 对象时的警告

我有一个使用 QWebChannel 创建谷歌地图实例的小部件。在 javascript 中实例化 QWebChannel 时会出现几个警告:

0 投票
1 回答
125 浏览

javascript - Pyqt5 从 QtWebChannel 移动窗口

我正在尝试使 mousePressEvent 和 mouseMoveEvent 事件工作以从 QtWebChannel 移动我的应用程序窗口。

我正在使用 self.setWindowFlags (QtCore.Qt.FramelessWindowHint) 删除窗口标志并使用带有 html、css 和 js 的自定义标志。

在 html 中,我有一个 id 为“header”的 div,它具有自定义窗口标志,我想按住鼠标左键,可以像传统窗口标志一样拖动窗口。

使用后端单击时,关闭、最小化和最大化按钮已经具有各自的功能,但是我在创建允许将窗口从<div id="header"> . . . </ div >.

如何在 QtWebChannel 中运行 mousePressEvent 和 mouseMoveEvent 事件来移动窗口并模拟传统的窗口标志?

片段html代码

github上的完整html代码:https ://github.com/onimac92/bankus/blob/master/index.html

代码最小的html:

在此处输入图像描述

0 投票
1 回答
69 浏览

qtwebengine - QWebChannel:在 QtCreator 之外运行时构造崩溃

当我尝试在 QtCreator之外new QWebChannel(this)运行我的程序时,代码在调用时崩溃。我已经检查了 DLL 依赖项,但找不到从 IDE 内部和外部运行它的区别。

在我添加的项目文件QT += webengine webenginewidgets webchannel中。还有其他我可能忘记的依赖项吗?

0 投票
0 回答
411 浏览

c++ - 有人如何通过现有的 TCP/IP 连接 (QTcpSocket) 使用 QWebChannel?

我试图弄清楚如何实现一个 QWebChannel,它通过现有的 QTCPSocket 而不是通过其默认的 QWebSocket 方法发送数据。

这是我已经尝试过的东西,但是我无法建立连接:

我制作了一个简单的程序,它实现了一个自定义的 QWebChannelAbstractTransport,它简单地输出 QWebChannel 对象发送和接收的数据。

我想知道是否有可能实现 QWebChannel 以使用基于非套接字的接口?

如果是这样,我必须对我当前的程序做些什么才能使它在单击按钮时,网络频道发送单击事件


编辑

期望的效果是,通常由 QWebChannel 通过 QWebSocket 传递的任何数据都被发送到 qDebug() 以在混合 C++/QtQuick 环境中输出。


这是我到目前为止所尝试的:


QWebChannelCustomTransport.pro


主文件


customtransport.h


自定义传输.cpp


main.qml


来自 Qt 5.14版本的 qwebchannel.js