使用Js调用Qt中类的原理,是在Qt中新建一个C++的类作为C++与Js的共同的类,这个类的父类是QObject,通过webChannel将这个类注册到Js中后,然后,将qtwebengineview的通道设置为webChannel,Js可以直接调用桥梁中的糟函数,再利用糟函数发出信号,再使用其它窗口接收这个类的信号,完成Js调用Qt中函数的作用。
使用Js调用Qt中类的原理,是在Qt中新建一个C++的类作为C++与Js的共同的类,这个类的父类是QObject,通过webChannel将这个类注册到Js中后,然后,将qtwebengineview的通道设置为webChannel,Js可以直接调用桥梁中的糟函数,再利用糟函数发出信号,再使用其它窗口接收这个类的信号,完成Js调用Qt中函数的作用。
定义一个Qt调用Js的通道
文件名: webBridge.h *****************************class JsChannel : public QObject { Q_OBJECTpublic: explicit JsChannel(QObject *parent = nullptr); public slots://这个糟函数是给Js调用的,每当Js调用这个 jsCallme() 这个类就会在Qt中产生 JsSignal这个信号 void jsCallme(){//这个发送到Js的信号 emit JsSignal; } signals: };
将Qt中的类注册到Js中
//通过webchannel将这个类注册到html JsChannel myChannel = new JsChannel(); myChannel->registerObject("mybridge", myBridge);//让webengineview启用 channel ui->webEngineView->page()->setWebChannel(myChannel);
在html引入qtwebchanel
html文件 *****************************************
在 Js 中注册qt类, 并调用Qt中的方法。
new QWebChannel(qt.webChannelTransport,function (channel) {window.qtClass = channel.objects.mybridge;//这个mybridge与第五步中引号中的内容相同 qtClass.jsCallme('123');//Js调用了JsCallme的函数,此时WebChannel会发送JsSignal信号。 });
Qt调用 Js 中的方法
ui->webEngineView->page()->runJavaScript()
https://www.cnblogs.com/mc-r/p/15914903.html