通过消息信号

时间:2019-02-06 16:24:01

标签: qml

我想动态创建一个QML WorkerScript对象,并在我的JavaScript代码中读取其功能的输出。这是我在QML文件中尝试的内容:

import QtQuick 2.0

Rectangle {
    id: root
    width: 200
    height: 300

    Component.onCompleted: {
        var worker = Qt.createQmlObject('import QtQuick 2.0; WorkerScript { source: "dataloader.js"; }', root)
        worker.sendMessage();
        worker.message.connect(function (msg) { console.log(msg); });
    }
}

这是dataloader.js文件的来源:

WorkerScript.onMessage = function(msg) {
    WorkerScript.sendMessage('test');
}

我希望代码将“ test”输出到控制台,但是它输出“ QVariant(QQmlV4Handle)”。我在Qt网站(http://doc.qt.io/qt-5/qml-workerscript.htmlhttp://doc.qt.io/qt-5/qtquick-threading-example.html#workerscript)上的一些示例中看到有一个messageObject属性,但是当我尝试使用worker访问它时,似乎无法从connect函数访问它。 messageObject。有人可以在这里向我指出正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样,但是我通过在WorkerScript对象中捕获消息信号并将messageObject发出到我添加到该对象的新信号中,从而获得了所需的功能。这是一个代码示例(dataloader.js保持不变):

var worker = Qt.createQmlObject('import QtQuick 2.0; 
    WorkerScript { 
        signal loaded(var value); 
        source: "dataloader.js"; 
        onMessage: { loaded(messageObject); } 
    }', root)
worker.loaded.connect(function (value) { console.log(value); });
worker.sendMessage();