本文主要是介绍QT中使用QTWebEngine加载本地HTML并与JS交互回调唤起CMD命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、.pro工程文件中添加引用
QT += webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
2、定义一个bridge类
#include <QObject>
#include<QMessageBox>
class bridge : public QObject
{void jscallme(const QString &text){if(text ==QString::fromLocal8Bit("2")){//QMessageBox::information(NULL, "jscallme", text);system("gnome-terminal -x bash -c 'cd /home/rtour/workspace/qt-screen/rtour/sh;./setup_bei.sh'&");}else {system("gnome-terminal -x bash -c 'cd /home/rtour/workspace/qt-screen/rtour/sh;./setup_hong_test.sh'&");}}};
此处jscallme为HTML中将会唤起的方法
system方法为唤起终端执行命令
3、在工程内创建webengine
ui->setupUi(this);
webView = new QWebEngineView(this);
webView->load(QUrl("http://localhost:3000/"));
setCentralWidget(webView);
webChannel = new QWebChannel(webView->page());
bridge *bridge = new bridge();
webChannel->registerObject("bridge", bridge);
webView->page()->setWebChannel(webChannel);
这里http://localhost:3000/是HTML文件的地址,我是通过nginx代理发布的。
registerObject(“bridge”, bridge);我的理解为将"bridge"这个通道的代理交给bridge这个实例对象来处理,同时在html里也会通过"bridge"唤起jscallme这个方法的
html创建通道
首先是引用一个js文件,这个文件在qt的安装位置内可以找到
//获取bridge对象
new QWebChannel(qt.webChannelTransport, function(channel) {window.bridge = channel.objects.bridge;})
//通过bridge唤起jscallme
function onShowMsgBox() {if (window.bridge) {window.bridge.jscallme(line)}}
这篇关于QT中使用QTWebEngine加载本地HTML并与JS交互回调唤起CMD命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!