Qt和JavaScript使用QWebChannel交互一——和Qt内嵌网页交互
文章目录
前言
Qt
提供了QWebChannel
来和网页进行通信,只需要注册自定义对象一下,就可以直接绑定信号槽来进行Qt程序和网页之前的通信,非常方便
下面使用一个案例来学习QWebChannel
环境
:vs2017+Qt5.11.2 写Qt
代码,vsCode写js
代码
一、效果
直接上图
二、实现过程
1. Qt端
- 新建一个
Qt Gui
项目,取名WebChannelDemo
- 一路下一步,最后选择
QWidget
基类
- 得到一个这样结构的项目
- 使用
Qt Designer
打开webchanneldemo.ui
,拖一个界面
- 这个时候再来创建一个用于通过
WebChannel
通信的WebTransport
类,基类选择QObject
- 为了方便,不用每次使用都创建一个
WebTransport
对象,我们将这个类写成单例
类,然后定义和js交互的信号的槽函数,最近定义一个宏来使用实例
#pragma once
#include <QObject>
class WebTransport : public QObject
{
Q_OBJECT
WebTransport(QObject *parent = nullptr);
~WebTransport();
public:
// 获取实例
static WebTransport* instance();
signals:
// 向js发送信号
void msgToJs(const QString& msg);
// 将从js接收的数据发送出去
void receviedJsMsg(const QString& msg);
public slots:
// js调用此函数,接收js传入的数据
void msgToQt(const QString& msg);
};
// 定义一个宏
#ifndef WEB_TRSPT
#define WEB_TRSPT WebTransport::instance()
#endif // !WEB_TRSPT
- 最后,我们到
WebChannelDemo
类中来初始化一下,主要做了以下几件事:- 关联信号槽
- 实例化一个
QWebChannel
对象 - 将
WebTransport
单例对象注册到QWebChannel
- 将
QWebChannel
对象设置到网页中去 - 最后再加载本地网页
void WebChannelDemo::setup()
{
// 绑定信号槽
connect