Qt - QWebChannel实现网页与C++程序双向通信

这里实现的内容,在Qt里嵌入一个Html网页。这里使用了QWebEngineView来实现。

然后要让网页和C++怎么交互呢?

这里需要几个关键的类
QWebChannel
然后就是一个继承自QObject的类

#pragma once

#include <QObject>
#include <QDebug>
#include <QMessageBox>

class MidHelper : public QObject
{
	Q_OBJECT

public:
	MidHelper(QObject *parent = nullptr);
	~MidHelper();

public slots:
	// 接收到页面发送来的消息
	void web_to_cpp(const QString& msg);

};

然后我把网页放到了qt程序中

m_view = new QWebEngineView(this);
...
QVBoxLayout* v_layout_main = new QVBoxLayout();
setLayout(v_layout_main);

建立沟通web和c++的桥梁

m_midHelper = new MidHelper(this);
m_webChannel = new QWebChannel(this);
m_webChannel->registerObject("xxx", m_midHelper); // xxx是我取的名字
m_view->page()->setWebChannel(m_webChannel);

这里需要注意注册对象,第一个参数是一会web里要用的名字,第二个是要调用的对象。
然后QWebEngineView对象的m_view调page找到那个web页面,架桥setWebChannel。

然后是网页里的代码

<button id="btn_ff">ff</button>
 <script type="text/javascript">


	$('#btn_ff').click(function(){



		  new QWebChannel(qt.webChannelTransport,
		  function(channel){
		  var webobj = channel.objects.xxx;
		  window.foo = webobj;
		  webobj.web_to_cpp("dadasd");
		  });
	})


	// 信号槽绑定
	function js_function(content)
	{
		alert("js_function:"+ content);
	}
 </script>

这里主要一下只要 注意
var webobj = channel.objects.xxx;
里面的xxx就是上面设置的名字。其他地方复制粘贴,webobj对象调用方法,C++有什么方法直接调用就完事了,当然最好是字符串,其他类型的没试过。

然后C++怎么调web里面的方法呢?

m_view->page()->runJavaScript(QString("js_function('%1');").arg(m_lineEdit->text()));

参考一下,方法名称用字符串拼接出来的,用arg格式化占位符补充内容。

在这里插入图片描述
在这里插入图片描述

总结一下:
1.QWebChannel和QWebEngineView
2.QWebChannel的对象要塞一个QObject对象

m_webChannel->registerObject("xxx", m_midHelper);

3.JS里

  new QWebChannel(qt.webChannelTransport,
  function(channel){
  var webobj = channel.objects.xxx;
  window.foo = webobj;
  webobj.web_to_cpp("dadasd");
  });

xxx名字,方法是被塞入QObject里面的方法
4.C++里

m_view->page()->runJavaScript(QString("js_function('%1');").arg(m_lineEdit->text()));

用字符串拼web里面的方法

相关资料:
https://doc.qt.io/qt-5/qtwebchannel-javascript.html#setting-up-the-javascript-api

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值