从JavaScript调用Qml函数

时间:2015-07-09 05:06:39

标签: javascript html5 function qml

我正在使用Qt开发一个应用程序而且我被困在某一点上,我想从JavaScript调用来自我的HTML的特定事件的QML函数。

我尝试了以下方法:

app.html

<html>
<head><title>Myapp</title></head>
<script src="testjs.js" type="text/javascript"></script>
<body bgcolor="orange">
<p id="demo" onclick="myFunction1()">Click me to change my text color.</p>
</body>
</html>

testjs.js

function myFunction1() {
    alert("alert");
    someComponent.someSlot(30);
    someComponent.someSlot(31);
}

main.qml

import 'testjs.js' as JavascriptObject


ApplicationWindow {
    id: someComponent
    visible: true
    x: initialX
    y: initialY
    width: initialWidth
    height: initialHeight
    title: webView.title

    WebView {
        id: webView
        anchors.fill: parent
        url: initialUrl
    }
    function someSlot(v) {
        console.log("Signal received " + v);
    }
    Component.onCompleted: {
        JavascriptObject.myFunction1(41);
     }
}

myFunction1()中的应用程序启动testjs.js被调用,它在我的QML中调用someSlot函数,但不显示警报。从HTML页面调用myFunction1()函数时,仅显示alert并且不调用someSlot函数。

2 个答案:

答案 0 :(得分:0)

您无法在QML中使用alert(),因为它未映射。你有两个解决方案:

  1. 使用console.log
  2. 使用在QML中实例化的BoxDialog,并从JS启动它。

答案 1 :(得分:0)

您可能想要使用Qt的WebChannel。它用于使用WebSockets在托管的HTML内容和外部资源之间进行通信。有关更多信息,请参阅此处:

http://doc.qt.io/qt-5/qtwebchannel-index.html