QWebEngineView与js交互

1.先用QWebChannel建立交互通道          

QWebChannel* channel = new QWebChannel(m_view);
m_view->page()->setWebChannel(channel);

2.在通道上注册交互对象变量。    

MFWebChannelBridge* pBridge = new MFWebChannelBridge(channel);
channel->registerObject("webChannelBridge", pBridge);

3.Qt运行Js直接调用即可,注意:Js是异步运行的           

m_view->page()->runJavaScript("onShowJsAlert3()");

4.Qt运行js,如果需要返回值,则要写回调函数   

QString strJs = QString("onShowJsAlert4()");
    QWebEngineCallback<const QVariant&> resultCallback = [](const QVariant& v)
    {
        qDebug() << TR("4 Js的返回值是:") << v.toJsonObject();
    };
    m_view->page()->runJavaScript(strJs, resultCallback);

5.Js调用Qt,要先在<head>中添加<script src="qwebchannel.js"></script>

qwebchannel.js文件一般在Qt安装目录里可以找到。

然后页面中添加   

<script>
      new QWebChannel(qt.webChannelTransport, function(channel)
      {
        window.bridge = channel.objects.webChannelBridge;
      })

</script>

即可获取到注册的交互变量webChannelBridge。

最后js中直接运行Qt的槽函数即可:   

bridge.sltShowQtMsgBox1();

6.Js调用Qt,如果需要返回值,则要写异步处理函数        

let qtRet = bridge.sltShowQtMsgBox2();
Promise.resolve(qtRet).then(function (result)
{
  console.log("2 asyn return Qt value=", result.vRet);
}, function (err)
{
});

参考:Qt QWebEngine 加载网页及交互,实现C++与JS 相互调用_qtwebengine-优快云博客

所有代码的7z压缩后的Base64编码如下:

(注意复制出来是一行,再Base64 Decode,保存成7z文件,再解压即可)

N3q8ryccAAQB/xZnhh8AAAAAAAAjAAAAAAAAAAchdHTgegUd/F0Ad67T4iHI9CNsL9EMmEK5wzvkCD2yRxroiAVn3ZpiVF6H96ugzwUiv5iWKamyqykD+bVS1iUdGjkF8Dr0JT9wzL0ZLudDKzT6L+G2ML82652PlrR8+2VjHwexPP3kktelj5BA2/vKniocGR2Ddd+TXMCe5ibR0Ohgt1PYMSHif9YSVrEqHrgJdlC0giOvWWOBmg84YRXozBk4k1DCjWgKbM6E6F8KeCak/nqOSkjiUDSP3xyCpN6GmE+zxxD2U64c1etOl1wrNdR80mXTdWQVsmlTRVJQTpiTjSmOsyeDZZTO1SupBzCueXIwQ7FgLKXffpCRbL/ziW6Iqfpn/ofvDgN7ckIkj6Bf58gvaRR5WSciQfbC2HGdyRrc20vwn5ozTtp3oP/edpQc7va2hoKX2jsXZ8cKS10sG1STjz7pCdj55dBPryro8i4TGh6LmXKanJ1sZXRugUJeL0hSKjsIfZqo3v

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值