WorkerScript QML Type
Habilita el uso de hilos en una aplicación Qt Quick. Más...
| Import Statement: | import QtQml.WorkerScript |
Propiedades
Señales
- message(jsobject msg)
Métodos
- void sendMessage(jsobject message)
Descripción detallada
Utiliza WorkerScript para ejecutar operaciones en un nuevo subproceso. Esto es útil para ejecutar operaciones en segundo plano de modo que el hilo principal de la GUI no se bloquee.
Los mensajes pueden ser pasados entre el nuevo hilo y el hilo padre usando sendMessage() y el manejador onMessage().
Un ejemplo:
import QtQuick Rectangle { width: 300; height: 300 Text { id: myText text: 'Click anywhere' } WorkerScript { id: myWorker source: "script.mjs" onMessage: (messageObject)=> myText.text = messageObject.reply } MouseArea { anchors.fill: parent onClicked: (mouse)=> myWorker.sendMessage({ 'x': mouse.x, 'y': mouse.y }) } }
El script worker anterior especifica un archivo JavaScript, "script.mjs", que maneja las operaciones a realizar en el nuevo hilo. He aquí script.mjs:
WorkerScript.onMessage = function(message) {
// ... long-running operations and calculations are done here
WorkerScript.sendMessage({ 'reply': 'Mouse is at ' + message.x + ',' + message.y })
}Cuando el usuario hace clic en cualquier parte del rectángulo, se llama a sendMessage(), lo que activa el manejador WorkerScript.onMessage() en script.mjs. Éste, a su vez, envía un mensaje de respuesta que es recibido por el manejador onMessage() de myWorker.
El ejemplo utiliza un script que es un módulo ECMAScript, porque tiene la extensión ".mjs". Puede utilizar declaraciones de importación para acceder a la funcionalidad de otros módulos y se ejecuta en modo estricto de JavaScript.
Si en cambio un script de trabajador tiene la extensión ".js", se considera que contiene sentencias JavaScript simples y se ejecuta en modo no estricto.
Nota: Cada elemento WorkerScript instanciará un motor JavaScript independiente para garantizar un aislamiento perfecto y la seguridad de los hilos. Si el impacto de esto resulta en un consumo de memoria demasiado alto para su entorno, entonces considere compartir un elemento WorkerScript.
Restricciones
Dado que la función WorkerScript.onMessage() se ejecuta en un hilo independiente, el archivo JavaScript se evalúa en un contexto independiente del motor QML principal. Esto significa que, a diferencia de un archivo JavaScript ordinario que se importa en QML, el script.mjs del ejemplo anterior no puede acceder a las propiedades, métodos u otros atributos del elemento QML, ni puede acceder a ninguna propiedad de contexto establecida en el objeto QML a través de QQmlContext.
Además, existen restricciones sobre los tipos de valores que se pueden pasar al script de trabajador y desde él. Consulte la documentación de sendMessage() para obtener más información.
Los scripts de trabajador que son fuentes JavaScript simples no pueden utilizar la sintaxis .import. Los scripts que son módulos ECMAScript pueden utilizar libremente las sentencias import y export.
Documentación de propiedades
ready : bool [read-only]
Indica si WorkerScript se ha inicializado y está listo para recibir mensajes a través de WorkerScript.sendMessage().
source : url
Contiene la url del archivo JavaScript que implementa el gestor WorkerScript.onMessage() para operaciones con hilos.
Si el componente de nombre de archivo de la url termina en ".mjs", el script se interpreta como un módulo ECMAScript y se ejecuta en modo estricto. En caso contrario, se considera un script plano.
Documentación sobre señales
message(jsobject msg)
Esta señal se emite cuando se recibe un mensaje msg desde un script worker en otro hilo a través de una llamada a sendMessage().
Nota: El manejador correspondiente es onMessage.
Documentación del método
void sendMessage(jsobject message)
Envía el message dado a un manejador de script de trabajador en otro hilo. El otro manejador de script de trabajador puede recibir este mensaje a través del manejador onMessage().
El objeto message sólo puede contener valores de los siguientes tipos:
- boolean, number, string
- objetos JavaScript y matrices
- objetos ListModel (cualquier otro tipo de QObject* no está permitido)
Todos los objetos y matrices se copian en message. Con la excepción de los objetos ListModel, cualquier modificación realizada por el otro hilo a un objeto pasado en message no se reflejará en el objeto original.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.