通过消息信号从 QML WorkerScript.sendMessage 调用传递数据
Posted
技术标签:
【中文标题】通过消息信号从 QML WorkerScript.sendMessage 调用传递数据【英文标题】:Pass data from QML WorkerScript.sendMessage call through message signal 【发布时间】: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.html 和 http://doc.qt.io/qt-5/qtquick-threading-example.html#workerscript)上的一些示例中看到,有一个 messageObject 属性,但是当我尝试使用 worker.messageObject 访问它时,似乎无法从连接函数访问它。谁能在这里指出我正确的方向?
【问题讨论】:
【参考方案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();
【讨论】:
以上是关于通过消息信号从 QML WorkerScript.sendMessage 调用传递数据的主要内容,如果未能解决你的问题,请参考以下文章
从Qt Quick WorkerScript调用Python方法
如何从另一个线程的 cpp 代码同步调用 qml 信号处理程序?