网站首页 > 技术文章 正文
一. 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>
猜你喜欢
- 2024-11-22 美国战略司令部发神秘字符后删除 网友懵:核武器密码?
- 2024-11-22 微信群聊名称可以备注了:仅个人可见
- 2024-11-22 LPL:新王诞生!TES3-2复仇JDG夺得LPL夏季赛冠军
- 2024-11-22 【提醒】刚刚,微信发布公告,不能在朋友圈发这些东西!
- 2024-11-22 JS 函数式概念: 管道 和 组合
- 2024-11-22 「夜读」你的人品,自己会说话
- 2024-11-22 鼻炎反复发作?不妨试试这8招
- 2024-11-22 什么是 JavaScript?
- 2024-11-22 楼梯踏步设计尺寸指引HJSJ-2022
- 2024-11-22 楼梯标准规范尺寸HJSJ-2021
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-