我想动态创建一个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.html和http://doc.qt.io/qt-5/qtquick-threading-example.html#workerscript)上的一些示例中看到有一个messageObject属性,但是当我尝试使用worker访问它时,似乎无法从connect函数访问它。 messageObject。有人可以在这里向我指出正确的方向吗?
答案 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();