使用WorkerScript在新线程中运行操作。这对于在后台运行操作非常有用,因此不会阻止主GUI线程。
本文: https://www.lovejia.win/blog/article/WorkerScript.html
参考原文:http://doc.qt.io/qt-5/qml-workerscript.html
参考译文:http://blog.csdn.net/icebergkevin/article/details/50133337
属性说明
source : url
它保存了WorkerScript.onMessage()实现线程操作处理程序的JavaScript文件的url 。
信号说明
message(jsobject msg)
当通过对sendMessage()的调用从另一个线程中的工作者脚本接收到消息msg时,发出此信号。
相应的处理程序是onMessage。
方法说明
sendMessage(jsobject message)
将给定消息发送到另一个线程中的工作程序脚本处理程序。另一个工作者脚本处理程序可以通过onMessage()处理程序接收此消息。
该message对象只能包含以下类型的值:
1、布尔,数字,字符串
2、JavaScript对象和数组
3、ListModel对象(任何其他类型的QObject *是不允许的)
所有对象和数组都复制到message。除了ListModel对象之外,其他线程对传入的对象的任何修改message都不会反映在原始对象中。
功能简述
使用WorkerScript在新线程中运行操作。这对于在后台运行操作非常有用,因此不会阻止主GUI线程。
可以使用sendMessage()和onMessage()处理程序在新线程和父线程之间传递消息。
由于WorkerScript.onMessage()函数在单独的线程中运行,因此在与主QML引擎分离的上下文中评估JavaScript文件。这意味着,与导入到QML中的普通JavaScript文件不同,script.js上面的示例不能访问QML项的属性,方法或其他属性,也不能通过QQmlContext访问在QML对象上设置的任何上下文属性。
此外,对可以传递给worker脚本和从worker脚本传递的值的类型有限制。
例
下面的例子使用WorkerScript在新线程中运行操作,鼠标点击窗口中的某一个位置,程序中的那行文本便会更新当前鼠标的XY坐标:
1 | import QtQuick 2.0 |
上述工作程序脚本指定了一个JavaScript文件“script.js”,它处理要在新线程中执行的操作。这里是script.js:
1 | WorkerScript.onMessage = function(message) { |
当用户单击矩形内的任何位置时,sendMessage()被调用,触发WorkerScript.onMessage()处理程序script.js。这反过来发送回复消息,然后由onMessage()处理程序接收myWorker。