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)
                 }
               }
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值