WorkerScript QML Type
Permet l'utilisation de threads dans une application Qt Quick. En savoir plus...
| Import Statement: | import QtQml.WorkerScript |
Propriétés
Signaux
- message(jsobject msg)
Méthodes
- void sendMessage(jsobject message)
Description détaillée
Utilisez WorkerScript pour exécuter des opérations dans un nouveau thread. Cela est utile pour exécuter des opérations en arrière-plan afin que le thread principal de l'interface graphique ne soit pas bloqué.
Des messages peuvent être échangés entre le nouveau thread et le thread parent à l'aide de la fonction sendMessage() et du gestionnaire onMessage().
Exemple :
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 })
}
}Le script de travail ci-dessus spécifie un fichier JavaScript, « script.mjs », qui gère les opérations à effectuer dans le nouveau thread. Voici la méthode script.mjs:
WorkerScript.onMessage = function(message) {
// ... long-running operations and calculations are done here
WorkerScript.sendMessage({ 'reply': 'Mouse is at ' + message.x + ',' + message.y })
}Lorsque l’utilisateur clique n’importe où à l’intérieur du rectangle, la méthode ` sendMessage() ` est appelée, ce qui déclenche le gestionnaire ` WorkerScript.onMessage() ` dans ` script.mjs`. Celui-ci envoie à son tour un message de réponse qui est ensuite reçu par le gestionnaire ` onMessage() ` de ` myWorker`.
L'exemple utilise un script qui est un module ECMAScript, car il porte l'extension « .mjs ». Il peut utiliser des instructions d'importation pour accéder aux fonctionnalités d'autres modules et s'exécute en mode strict JavaScript.
Si un script de worker porte l’extension « .js », il est alors considéré comme contenant des instructions JavaScript standard et s’exécute en mode non strict.
Remarque : chaque élément WorkerScript instancie un moteur JavaScript distinct afin de garantir un isolement parfait et la sécurité des threads. Si cela entraîne une consommation de mémoire trop importante pour votre environnement, envisagez de partager un élément WorkerScript.
Restrictions
La fonction ` WorkerScript.onMessage() ` s’exécutant dans un thread distinct, le fichier JavaScript est évalué dans un contexte séparé du moteur QML principal. Cela signifie que, contrairement à un fichier JavaScript ordinaire importé dans QML, l’ script.mjs e de l’exemple ci-dessus ne peut pas accéder aux propriétés, méthodes ou autres attributs de l’élément QML, ni aux propriétés de contexte définies sur l’objet QML via ` QQmlContext`.
De plus, il existe des restrictions concernant les types de valeurs pouvant être transmises vers et depuis le script de travail. Consultez la documentation relative à la fonction ` sendMessage()` pour plus de détails.
Les scripts de travail qui sont des sources JavaScript simples ne peuvent pas utiliser la syntaxe .import. Les scripts qui sont des modules ECMAScript peuvent utiliser librement les instructions import et export.
Documentation sur les propriétés
ready : bool [read-only]
Cela vaut que l'WorkerScript e ait été initialisé ou non et qu'il soit prêt à recevoir des messages via WorkerScript.sendMessage().
source : url
Ce paramètre contient l'URL du fichier JavaScript qui implémente le gestionnaire « WorkerScript.onMessage() » pour les opérations threadées.
Si le nom de fichier de l'URL se termine par « .mjs », le script est alors analysé comme un module ECMAScript et exécuté en mode strict. Sinon, il est considéré comme un simple script.
Documentation Signal
message(jsobject msg)
Ce signal est émis lorsqu'un message « msg » est reçu d'un script de travail exécuté dans un autre thread, via un appel à la fonction ` sendMessage()`.
Remarque : le gestionnaire correspondant est onMessage.
Documentation de la méthode
void sendMessage(jsobject message)
Envoie l'message on indiquée à un gestionnaire de script de travail dans un autre thread. Ce gestionnaire de script de travail peut recevoir ce message via le gestionnaire onMessage().
L'objet ` message ` ne peut contenir que des valeurs des types suivants :
- booléen, nombre, chaîne de caractères
- objets et tableaux JavaScript
- Objets ListModel (tout autre type d'QObject* n'est pas autorisé)
Tous les objets et tableaux sont copiés dans l’ message. À l’exception des objets ListModel, toute modification apportée par l’autre thread à un objet transmis dans l’ message ne sera pas répercutée dans l’objet d’origine.
© 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.