问题标签 [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.
python - QWebEnginePage 与 javascript 交互不起作用?
我不熟悉javascript
和QWebEnginePage
。
当我设置self.content.setText('text')
内容时,QWebEngineView
内容没有改变?
蟒蛇代码
索引html:
javascript - 使用 Qt runJavaScript 函数访问 Javascript 类对象
由于我是 javascript/HTML 新手,最近我开始使用 Qt QWebEngineView 进行项目。一段时间以来,我一直在寻找将数据从 C++ 程序共享到 Javascript 的最佳方法。到目前为止,我能够将数据发送到 Javascript 程序的唯一方法是使用该QWebEnginePage::runJavaScript
函数。我也看到有使用这里QWebChannels
描述的可能性,但我更喜欢它的简单性。QWebEnginePage::runJavaScript
到目前为止,我使用该runJavaScript
方法遇到的唯一问题是,为了编写一个变量,这需要在 HTML 文件中定义,我实际上不是 100% 确定这是否是唯一的方法,但是这是它对我有用的唯一方法。我目前的情况是这样的:
在 HTML 文件中:
在 C++ 文件中:
使用此设置,我可以从 C++ 代码在 Javascript/HTML 端编写变量。因为使用此解决方案,我需要在 HTML 文件中为要发送的每个值创建尽可能多的单独变量,所以我想问是否可以使用类对象或 JavaScript 对象来代替使用单独的变量。我创建了一个类,其中包含一些方法来编写类成员,如下所示: 在 js 文件中:
使用此解决方案,如果我创建PositionState
类的对象并从 javascript 文件中调用函数obj.setPosition(44,10.45)
,则对象的类成员设置正确,但是如果我从 C++ 尝试它,我会遇到一些错误。
如果只obj
在 Javascript 文件中定义,我会得到错误js: Uncaught ReferenceError: obj is not defined
。如果我在 HTML 文件中定义一个变量Id="obj"
并运行相同的脚本,我会收到错误js: Uncaught TypeError: obj.setPosition is not a function
,即使obj.setPosition
我使用的是错误,也会发生错误document.getElementById('obj').setPosition
。
因此,对于我几乎没有 HTML/Javascript 知识的情况来说,HTML 文件不知道我的类定义,因此无法识别该setPosition
方法。所以我的问题是是否有办法从 C++ 代码编写类对象。
我还尝试使用类似 JavaScript 的对象,var Position = {Latitude: 0, Longitude: 0, Heading: 0}
并从 C++ 代码中运行带有 QString 的脚本, Position = {Latitude: 40, Longitude: 9, Heading: 20};
但也无法更改 Position 对象属性。
任何帮助将不胜感激,谢谢。
qt - QtWebEngineProcess 启动后立即关闭
我使用QtWebEngineView 编写了一个Hellow World程序:
该程序按我的预期工作,问题是当我使用macdeployqt部署这个应用程序时,它在执行后立即关闭。我在Qt 5.14和Qt 5.15上测试了该应用程序,两者都有同样的问题。问题的原因似乎是QtWebEngineProcess在运行后自动关闭。任何帮助将不胜感激。
更新:
我在控制台中收到以下错误,一遍又一遍地重复。
ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
qt - 仅从 C++ API 进行异步调用,Qt 网络通道迁移看起来是不可能的
我正在使用带有 HTML 的 c++ 应用程序。
使用 webkit,我们可以从 c++ 对象同步调用 c++ API。javascript中的逻辑很清楚。
但是对于 WebChannel,来自 c++ 对象的每个 API 调用都是异步的。如果我们从异步调用中获得一个对象-B 作为返回值,那么来自对象-B 的 API 调用也是异步的。这不仅大大增加了代码复杂度,而且逻辑也难以维护。
考虑这段代码:
首先,从 webkit 迁移现有代码将会有太多的工作。其次,如粗体突出显示的那样,for 循环被破坏了。
有替代解决方案吗?QT5.15及以上版本除了webchannel还有什么可以用的吗?
c++ - Qt WebChannel API 在客户端不起作用
我正在尝试使用 Qt WebEngine 和 WebChannel API 从 C++ 小部件向 JavaScript 发出信号。预期的行为是,当我单击 tableView 小部件中一行的名称列时,应该会出现一个新的小部件窗口,其中包含该行的一些额外数据。目前,如果我添加一个按钮并将其连接到发出信号的插槽,它就可以工作(JavaScipt 文件中的 connect 方法有效)。但是,我希望这样当我单击该列时,它会自动将数据发送到 JS,而无需单击按钮。目前我只是发送一个 QString,但稍后我还需要发送其他复杂的数据。如果我在 myWidget.cpp 文件中执行以下操作,则不会在 JS 中调用 connect 方法。
内部.h:
main.cpp 内部
但是如果我添加一个按钮并在构造函数中添加连接方法,那么它就可以工作(但在这种情况下我必须单击按钮,我不想要那个)
JavaScript 代码:
c++ - 如何在 html 端使用 QT webchannel 从 qml 接收动态变量?
我目前可以使用 webchannel 将常量值从 qml 文件发送到 html 并显示值。但是当我发送一个动态变量舔时钟时间变量的初始值显示在 html 中,它不能随着时间的推移而更新。我使用动态图表来显示属性值。
如何发送和显示动态变量?
我的 QML 代码:
我的html代码: