如何从 QML 调用 HTML 函数

Posted

技术标签:

【中文标题】如何从 QML 调用 HTML 函数【英文标题】:How to call HTML function from QML 【发布时间】:2017-04-20 12:23:44 【问题描述】:

我想从 QML 调用 html 中的 reload 函数。我可以从 HTML 调用 QML 函数,如下代码所示。

QML 文件:

import QtQuick 2.5
import QtQuick.Window 2.2
import QtWebEngine 1.0
import QtWebChannel 1.0

Window 
    visible: true
    width: 640
    height: 480

    QtObject 
        id: myQmlObj

        WebChannel.id: "myQmlObj";

        signal someSignal(string msg);

        function someFoo(msg) 
            console.log(msg);
        
    

    WebEngineView 
        id: view
        anchors.fill: parent
        url: "myHtml.html"

        WebChannel 
           id: webChannel
           registeredObjects: [myQmlObj]
        
    

HTML 文件:

<html>
  <body>
    <script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script>
    <script type="text/javascript">

      var color = 1;
      var webChannel;

      function init() 
          color = 5;
      ;

      function createChannel(lat) 
      new QWebChannel(qt.webChannelTransport, function (channel) 
          webChannel = channel.objects.myQmlObj;
          webChannel.someSignal.connect("someSignal");
          webChannel.someFoo("someFoo");
          );
      

      function reload(id) 
          color = id;
      
    </script>
    <script src="someUrl?callback=init"></script>
  </body>
</html>

就像我可以从 HTML 调用 someFoo(),但我不能从我的 qml 调用 HTML 的 reload 函数。

【问题讨论】:

【参考方案1】:

你可以调用runJavaScript函数如下

function callHtmlFunction()
    view.runJavaScript("reload("+ color +")");

【讨论】:

以上是关于如何从 QML 调用 HTML 函数的主要内容,如果未能解决你的问题,请参考以下文章

无法调用QML函数

从 C++ 插件调用 QML 中的 JS 函数

如何在创建对象时从 QML 调用任意 C++ 函数?

如何从 QML 组件调用自定义信号?

QML和JS引擎的关系以及调用c++函数的原理

如何从另一个线程的 cpp 代码同步调用 qml 信号处理程序?