WorkerScript QML Type

官方描述:在一个Qt Quick应用程序中可以使用线程了.

Import Statement:     import QtQuick .
属性:
source : url
信号:
message(jsobject msg)

使用WorkerScript在一个新线程中执行操作.再后台执行操作是很有用的,主GUI线程也不会锁定.

Message可以在新线程和父线程之间通过sendMessage()和onMessage()进行传递消息.
方法:
sendMessage(jsobject message)
案例:

功能是:鼠标点击窗口中的某一个位置,程序中的那行文本便会更新当前鼠标的XY坐标.

运行效果如下图所示:

import QtQuick 2.0

Rectangle {
    width: 300; height: 300

    Text {
        id: myText
        text: ‘Click anywhere‘
    }

    WorkerScript {
        id: myWorker
        source: "script.js"

        onMessage: myText.text = messageObject.reply
    }

    MouseArea {
        anchors.fill: parent
        onClicked: myWorker.sendMessage({ ‘x‘: mouse.x, ‘y‘: mouse.y })
    }
}

The above worker script specifies a JavaScript file, "script.js", that handles the operations to be performed in the new thread. Here is script.js:

上面的worker script指定了一个javascript文件,"script.js",在这个新线程中处理将被执行的操作.下面就是这个script.js文件

WorkerScript.onMessage = function(message) {
    // ... long-running operations and calculations are done here
    WorkerScript.sendMessage({ ‘reply‘: ‘Mouse is at ‘ + message.x + ‘,‘ + message.y })
}
当用户在矩形中点击任意位置时,sendMessage()被唤醒,触发了workerScript.onMessage()再script.js中进行处理.这个返回一个回复消息,并且在之后被myWorker的onMessage()句柄接收到.
 
限制:
因为WorkerScript.onMessage()函数是在分开的线程中执行的,所以JavaScript文件从主QML工程中分开的上下文中被评估.这意味着不像常规的导入到QML中的javascript文件那样,上例中的script.js不能存取属性,方法或者其他的qml对象的属性,它也不能通过QQmlContext设置QML对象的任何上下文属性.
另外,在值类型上也有限制.可以发送到或者接受来自workerscript的值.具体见sendMessage()细节.
 

Worker script不能使用.导入语法:
见 Qt Quick Examples - Threading and Threaded ListModel Example.

属性文档:
source : url
这里保存着javascript文件的地址url,里面实现了WorkerScript.onMessage()处理线程操作.

信号文档:
message(jsobject msg)
This signal is emitted when a message msg is received from a worker script in another thread through a call to sendMessage().
通信句柄是onMessage.

方法文档:
sendMessage(jsobject message)
在其他线程中发送给定的消息到script 句柄.其他的worker script句柄可以接收消息,通过onMessage().
消息对象只可以包含一下的值类型:
boolean, number, string
JavaScript objects and arrays
ListModel objects (任何其他类型的 QObject* 是不被允许的.)

所有的对象和数组都被拷贝到message上.除了ListModel对象,在消息中任何被其他线程修改了的发送出来的信息 将不会再原始对象上反映出来.

时间: 2024-10-10 17:22:49

WorkerScript QML Type的相关文章

PinchEvent QML Type

PinchEvent类型在QtQuick 1.1中被添加进来.center, startCenter, previousCenter属性保存了两个触摸点之间的中心位置.scale and previousScale属性提供了缩放因子.angle, previousAngle and rotation属性提供了两个点之间以及旋转对应的角度.point1, point2, startPoint1, startPoint2属性提供了触摸点的位置.The accepted property may be

初学QML之qmlRegisterType

qmlRegisterType 是一个可以将C++实现的类在QML中调用的,连接C++和QML的一个工具 首先来看QtAssistant的介绍 int qmlRegisterType(const char * uri, int versionMajor, int versionMinor, const char * qmlName) This template function registers the C++ type in the QML system with the name qmlN

QML的property支持的类型

QML的property支持的类型 本文的qml 运行环境为qt4,在qt5中同样支持. 在Qt SDK 提供的文档中提及property支持类型 qml中的property的作用是动态为对象添加属性,并且添加的属性可以进行跟踪(值被修改了就会发出信号) 添加的属性,官方文档只提及了添加基础类型属性的说明 诸如:int, double,  bool, string, variant, color, real, vector3d, url, time, rect, size, enumeratio

Qt QML referenceexamples attached Demo hacking

/********************************************************************************************* * Qt QML referenceexamples attached Demo hacking * 说明: * 1. 本源代码来自Qt自带的Example,而本文也仅仅是代码解读,需要有点基础: * 2. 由于是Qt自带Demo,分为几个文件,文件存在联系,而本人把所有代码放在这个文件里,会照成阅读困难:

Qt官方教程翻译——Glossary Of QML Terms

附网址:http://qt-project.org/doc/qt-5/qml-glossary.html Glossary Of QML Terms -- QML各术语词汇表 Common Terms -- 通用术语 术语 定义 QML 编写QML应用程序所使用的语言,由Qt QML组件实现语言架构和引擎. Qt Quick QML语言的标准类型与功能库,由Qt Quick组件提供,并通过"importQtQuick 2.0"来使用. Type 在QML中,一个type有可能是一种Ba

QML Object Attributes

Every QML object type has a defined set of attributes. Each instance of an object type is created with the set of attributes that have been defined for that object type. There are several different kinds of attributes which can be specified, which ar

qml编程规范--import与as

本文参考自QtSDK的Import Statements import import的意思为导入模块,类似于c语言的include或者java的import可以导入,c++中通过qmlTypeRegister< classname >()函数向qml环境注册的qml Type,也可以导入某个路径下的js文件(js文件导入时会按序执行js语句),也可以导入一个带有自定义qml控件的文件夹. as as的意思为别名的意思(alias),用来解决导入的模块中类型名与其他模块中的类型同名冲突的,(js

Qt官方教程翻译——The QML Reference

附网址:http://qt-project.org/doc/qt-5/qmlreference.html The QML Reference QML是用来创建高度动态应用程序的声明式语言.在QML中,应用程序通过类似UI组件这样的模块搭建起来,通过设置这些模块的属性可以定义应用程序的行为.当与JavaScript结合起来时,应用程序的行为将变得脚本化.另外,QML大量使用Qt,它允许QML直接访问类型和其他Qt特性. 这个参考手册描述了QML语言的特性.手册中很多QML类型来源于Qt QML或Q

QT Demo 之 threading

在学习了MouseArea.Text.Image这些基本组件后,我们这一章学习如何在QML中完成一些异步处理. 这一章我们通过下述两个例子来分别讲解一下Timer和WorkerScript的使用. threadedlistmodel/timedisplay.qml 这一个示例的原始代码中同时使用了Timer和WorkerScript来完成一个比较简单的工作,为了简化处理,我针对代码做了一些小改动,去掉了WorkerScript部分(同时包括dataloader.js部分),只使用Timer来完成