【问题标题】:Pass data from QML WorkerScript.sendMessage call through message signal通过消息信号从 QML WorkerScript.sendMessage 调用传递数据
【发布时间】:2019-02-06 16:24:01
【问题描述】:

我想动态创建一个 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.messageObject 访问它时,似乎无法从连接函数访问它。谁能在这里指出我正确的方向?

【问题讨论】:

    标签: qml


    【解决方案1】:

    我不知道为什么它会这样工作,但我通过在 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多