编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Qt 与 HTML JS 的交互(qt与html通信)

wxchong 2024-07-20 08:21:31 开源技术 28 ℃ 0 评论

一. Qt使用类

1. QWebChannel

2. QWebEngineView


二. Qt JS文件

1. qwebchannel.js 一般在安装目录下 \webchannel\shared\qwebchannel.js


三. Qt代码

1. 定义交互类

#include <QWebEnginePage>

class JsClass: public QObject

{

Q_OBJECT

public:

explicit JsClass(QObject *parent = nullptr);

// qt 调用 js 函数

void qt_exec_js(QWebEnginePage* page, const QString& param) {

page->runJavaScript(QString("print_info(\"%1\")").arg(param)); //调用函数带字符串类型参数一定需要加双引号

//page->runJavaScript(QString("print_info(%1)").arg(12)); //调用函数参数类型为数字类型

//page->runJavaScript(QString("print_info()")); //调用函数无参

}

public slots:

// js 调用 qt 函数

void js_exec_qt(const QString& param) {

qDebug() << param;

}

};


2. 主函数代码片段

QString url = "file:///E:/login.html";

QWebEngineView webView

webView.load(QUrl(url));

webView.show();


JsClass jsClass;

QWebChannel webChannel;

webChannel.registerObject("jsClass", &jsClass);

webView.page()->setWebChannel(&webChannel);


connect(&webView, &QWebEngineView::loadFinished, this, [](){ jsClass.qt_exec_js(webView.page(), "Hello word");});

//重要, 必须要等到 QWebEngineView 类把html加载完毕才能执行调用js的函数, 不然会出现找不到js函数的错误


四. HTML 和 JS 代码

<!DOCTYPE html>

<html>

<head>

</head>

<body>

<div id="demo"></div>

</body>

</html>


<script src = "./qwebchannel.js"></script> //把Qt中提供的js加入进来


<script>

var jsClassIns;

// 获取qt中 JsClass 类的实例

function initObj(){

if (typeof qt != 'undefined'){

new QWebChannel(qt.webChannelTransport, function(channel){

jsClassIns= channel.objects.jsClass; //名字和 webChannel.registerObject("jsClass", &jsClass); 第一个参数保持一致

});

}

}

// 调用Qt函数

function exec_qt(param){

if(typeof jsClassIns != 'undefined'){

jsClassIns.js_exec_qt(param);

}

}

//Qt 调用 js

function print_info(param) {

document.getElementById("demo").innerHTML = param;

exec_qt("Hello China"); //当Qt调用了 js, Js 也调用Qt函数

}

initObj();

</script>

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表