解决windows用cef浏览器、mac用QWebEngineView浏览器js调用客户端的问题


js端:



<span style="color: rgba(128, 0, 0, 1)">测试与js交互</span>
<script src="qwebchannel.js"></script>   //QWebEngineView需要引用该资源
<script language="JavaScript">

  window.onload = function() {
    
    new QWebChannel(qt.webChannelTransport, function(channel) {
        // 获取Qt类交互对象
        var interactObject = channel.objects.interactObject;
        // 链接Qt类信号函数
        window.foo = interactObject;
    });
  }
  //判断系统类型
  function isMac() {
      return /macintosh|mac os x/i.test(navigator.userAgent);
  }
  function setCutScreen() {
    if(isMac()) {
      foo.CutScreen();   //调用QWebEngineView浏览器
    }
    else {
      window.CutScreen();   //调用cef浏览器
    }
  }
  function setNoCutScreen() {
    if(isMac()) {
      foo.NoCutScreen();
    }
    else {
      window.NoCutScreen();
    }
  }
  function close() {
    if(isMac()) {
      foo.CloseClient();
    }
    else {
      window.CloseClient();
    }
  }
</script>


不霸屏"> 霸屏"> 关闭">

客户端:

//C++对象
class InteractObject : public QObject
{
    Q_OBJECT

    public slots:
        void CutScreen()
        {
            QMessageBox::information(nullptr,"","CutScreen()");
        }
};

InteractObject *interactObject  = new InteractObject();

QWebChannel *channel = new QWebChannel(this);  //QWebChannel 对象

channel->registerObject("interactObject", interactObject);     //将interactObject注册到QWebChannel对象中
 
view->page()->setWebChannel(channel);          //WebEngineView下的page设置channel

 参考:(6条消息) QWebEngine 之 C++与Js通信_wjjontheway的专栏-CSDN博客

js