【QT进阶】Qt Web混合编程之html、 js的简单交互

news/2024/5/4 6:11:35

往期回顾

【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客
【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客
【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本)-CSDN博客【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客

 【QT进阶】Qt Web混合编程之html、 js交互

在Qt中,可以使用Qt WebEngine模块来加载和显示HTML页面,并且可以通过Qt的JavaScript桥接功能来在C++代码中调用JavaScript函数,或者在JavaScript代码中调用C++代码中的槽函数。

通过这种方式,可以实现C++代码和HTML、JavaScript之间的双向通信,从而实现更加灵活和交互性强的应用程序。例如,可以在HTML页面中调用C++代码中的函数来获取数据或执行操作,也可以在C++代码中调用JavaScript函数来更新页面内容或响应用户交互操作。

一、简单交互实现

之前我们说了可以通过QWebEngineView调用load或者setUrl方法实现qt程序里显示网页。

而除了可以显示网页,其实我们还可以和网页交互,互相发消息,调用函数。

1、互相发消息,调用函数

1.1html页面调用C++函数,在c++.h里声明
Q_ INVOKABLE void receive TextFromHtml(const QString& r text);
1.2C++发送内容给html,htmI链接 
content.sig_ sendTextToHtml.connect(function(message) {
output("接收到来自Qt的文本: " + message);
});

2、Qt.与html、js的桥梁QWebChannel 

2.1什么是QWebChannel 

QWebChannel是Qt中用于在C++代码和JavaScript之间进行通信的模块。它提供了一种简单而强大的方式来实现C++代码和JavaScript之间的双向通信,并且可以在Qt应用程序中加载和显示HTML页面,并与其中的JavaScript代码进行交互。

示例:

QWebEnginePage* pPage = ui.webEngineView->page();
QWebChannel* channel = new QWebChannel(this);

注册htm|对象 

channel->registerObject(QStringLiteral("content"), m_pWebObj);
pPage->setWebChannel(channel);
connect(m_pWebObj, &Web0bject::sig_SendToUl, this, &QtWebDemo::update_text);

registerObject类似于反射机制,qwebchannel.js 可以从m_pWebObj里反 射出想要执行的Qt函数

3、qwebchannel.js 

3.1什么是qwechannel.js

qwebchannel.js是一个JavaScript库,用于在HTML页面中与C++代码进行通信。它提供了一种方便的方式来与QWebChannel通信,并且可以在JavaScript代码中调用C++代码中的槽函数,或者在C++代码中调用JavaScript代码中的函数。

 这个文件一定不能缺失,这个文件就相当于是qt和html交互的桥梁,是必须要有的,一般在qt的安装目录下就可以搜索到。

4、简单示例

4.1main.cpp
// main.cpp
#include <QApplication>
#include <QWebEngineView>
#include <QWebChannel>
#include "myobject.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);QWebEngineView view;view.resize(800, 600);view.show();QWebChannel channel;MyObject myObject;channel.registerObject("myObject", &myObject);view.page()->setWebChannel(&channel);view.setUrl(QUrl("qrc:/index.html"));return app.exec();
}
4.2myobject.h 
// myobject.h
#ifndef MYOBJECT_H
#define MYOBJECT_H#include <QObject>class MyObject : public QObject
{Q_OBJECTpublic slots:void showMessage(const QString &message);
};#endif // MYOBJECT_H
4.3<!-- index.html --> 
<!-- index.html -->
<!DOCTYPE html>
<html>
<head><title>QWebChannel Example</title><script src="qwebchannel.js"></script>
</head>
<body><button onclick="sendMessage()">Send Message</button><script>new QWebChannel(qt.webChannelTransport, function(channel) {var myObject = channel.objects.myObject;function sendMessage() {myObject.showMessage("Hello from JavaScript!");}});</script>
</body>
</html>
4.4示例分析

本实例中,我们首先创建了一个QWebChannel,并注册了一个名为MyObject的C++对象。然后,我们将这个QWebChannel设置到QWebEngineView中,并加载了一个包含JavaScript代码的HTML页面。在JavaScript代码中,我们通过qwebchannel.js库来与C++代码中的MyObject对象进行通信,当点击按钮时,会调用C++代码中的showMessage槽函数,从而实现了C++代码和JavaScript之间的双向通信。 


以上就是Qt里html、 js的简单交互基本用法的简单介绍。

通过示例不难看出来,QWebChannel和qwebchannel.js,可以很方便地实现C++代码和HTML、JavaScript之间的交互,从而实现更加灵活和交互性强的应用程序。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!


http://www.mrgr.cn/p/52461605

相关文章

实在IDP文档审阅产品导引

实在IDP文档审阅&#xff1a;智能文档处理的革新者 一、引言 在数字化转型的浪潮中&#xff0c;文档处理的智能化成为企业提效的关键。实在智能科技有限公司推出的实在IDP文档审阅&#xff0c;是一款利用AI技术快速理解、处理文档的智能平台&#xff0c;旨在为企业打造专属的…

axios的封装理解和基本使用

axios的配置 ruoyi的前端对axios进行了封装&#xff0c;让我们发get请求或者是post请求更加方便了。 ruoyi对axios的封装在下面文件中&#xff1a;打开文件&#xff0c;可以看到它有三个显眼的方法&#xff0c;分别是request拦截器、response拦截器和通用下载方法。ruoYi接口地…

VUE的import store from ‘./vuex/store改为‘ import store from ‘./vuex/store.js‘

ERROR Failed to compile with 1 error 下午5:25:40 error in (webpack)-dev-server/client?http://10.18.173.180:8081/sockjs-node Syntax Error: no such file or directory, open D:\4myroom\H…

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型,包括Pro版本的Opus),亲测比GPT好用

Claude对话、上传图片的超详细教程来啦&#xff01; 近期&#xff0c;Claude 3 Opus的发布引发了网络上的广泛关注与热议&#xff0c;有观点认为其性能已经凌驾于GPT-4之上。虽然网络上已经出现了大量基于这两款先进AI技术的实际应用案例&#xff0c;但仍有许多人对在国内如何…

AI刘强东带货,能给数字人带来商业化吗?

在数字化浪潮的推动下,AI数字人技术正逐渐渗透到直播带货领域,引发行业关注。京东推出的AI刘强东数字人直播带货活动,尽管观看量超1155万,但商业化效果尚待观察。文章深入探讨了AI数字人在直播带货中的优势与挑战,以及其在电商领域的应用前景,为读者提供了一个全面了解AI…

ABC 286 C - Rotate and Palindrome

题目链接: 注意到“您可以按任意顺序执行以下两种运算零次或多次”。 因此,解决这个问题的一个重要观察点是,你可以假设 \(A\) 操作执行了几次,然后 \(B\) 操作执行了几次。你也可以假设 \(A\) 操作最多被执行 \(N\) 次(因为执行 \(N\) 次就会使它处于原始状态) 有了这个观…

Linux下注册系统服务

前言 init 历史上,Linux 的启动一直采用 init 进程。在类 Unix 的计算机操作系统中,init(初始化的简称)是在启动计算机系统期间启动的第一个进程。init 是一个守护进程,它将持续运行,直到系统关闭。它是所有其他进程的直接或间接的父进程。因为 init 的参数全在/etc/init…

influxdb 使用Influx CLI 命令操作数据

一、安装并使用 influx CLI 客户端下载地址:https://docs.influxdata.com/influxdb/v2/tools/influx-cli/ 二、需要下载influx服务器端和CLI工具 influxd:influx数据库的服务端。下载地址:https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-windows.zipinflux:连…

Spring Boot 多环境配置:YML 文件的三种高效方法

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

CAN总线原理_学习

随着通信技术的发展,现今通信方式和协议五花八门,但CAN通信仍然是车载网络最安全可靠且应用最广的技术之一。过去,汽车通常采用常规的点对点通信方式将电子控制单元及电子装置连接起来,但随着电子设备的不断增加,导线数量也随之增多,采用CAN总线网络结构,可以达到信息共…

Liunx挂载硬件设备

一、mount命令&#xff08;用于挂载文件系统&#xff09; &#xff08;一&#xff09;语法格式&#xff1a;mount 参数 源设备路径 目的路径 &#xff08;二&#xff09;参数 1、-t&#xff1a;指定挂载的文件系统 &#xff08;1&#xff09;iso9660&#xff1a;光盘或光盘…

【wpf】ObservableCollection 跨线程报错问题

背景 ObservableCollection 我们之前介绍过他和List的区别。ObservableCollection 的好处在于&#xff0c;当集合发生变化时&#xff0c;能发送通知通知界面发生相应的更改。但是ObservableCollection 有个弊端。无法在非UI线程中访问。 要么就是通知失效了&#xff0c;要么就…

OOP 1-3次作业总结

23201636-曾繁榕 目录前言 设计与分析 踩坑心得 改进建议 总结 前言 本次作业知识点:类与对象的基本使用,通过接口实现类重写(继承),日期类的基本使用,还主要考察了正则表达式的运用,字符串的提取分割; 个人体会:本次作业难度适中,题量适中,但有些比较复杂的类设计上容易…

centos同步yum源到本地,创建本地网络yum源

软件安装 在安装之前建议将yum源修改为国内的源 yum -y install vim createrepo yum-utils httpd net-tools reposync ls -1 /etc/yum.repos.d/ [root@DESKTOP-L9O2H6T ~]# yum repolist Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile repo id …

使用Termux在Android设备上编译运行SpecCPU2006

Spec CPU 2006 的使用说明&#xff08;曲线救国版&#xff09; 因本部分实验用到的Spec CPU2006依赖于多个编译工具包&#xff0c;因此对源码的编译要在配置好环境的Linux设备上运行&#xff0c;根据实验发现&#xff0c;现有的环境&#xff08;包括adb和termux&#xff09;都不…

模板匹配

1. 模板匹配步骤模板匹配是一种基于图像的技术,用于在图像中寻找与给定模板图像相似的部分。由于模板图像的尺寸小于待匹配图像的尺寸,同时又需要比较两幅图像的每一个像素的灰度值,因此常采用在待匹配图像中选择与模板相同的尺寸的滑动窗口,通过比较滑动窗口与模板的相似程…

相亲交友小程序,多端交付,支持二开,交友app小程序搭建陌生人交友私域聊天

随着社会生活节奏的加快&#xff0c;人们越来越依赖科技来解决生活中的各种问题&#xff0c;包括婚姻交友。近年来&#xff0c;相亲交友小程序成为了一种非常受欢迎的交友方式&#xff0c;它们可以让用户在轻松的氛围中&#xff0c;通过一些趣味性的互动方式&#xff0c;快速找…

2024信友队智灵班春季 Test1 总结

4月模考 死亡回放 模考时间线 1:30 比赛开始&#xff0c;读 T1 宇宙爆炸 的题1:50 自己手模了几组样例&#xff0c;得出了一个错误结论&#xff0c;打出了第一版错误代码&#xff0c;然后上交&#xff08; Wrong Answer 20 \color{red}\text{Wrong\ Answer\ 20} Wrong Answer …

FreeRTOS队列

FreeRTOS队列 在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消…

Postgres数据库中的死锁是如何产生的,如何避免和解决?

文章目录 死锁的产生原因如何避免死锁如何解决死锁示例代码查询死锁信息终止事务 在Postgres数据库中&#xff0c;死锁是一种特殊的情况&#xff0c;其中两个或多个事务相互等待对方释放资源&#xff0c;从而导致它们都无法继续执行。这种情况通常发生在多个事务尝试以不同的顺…