Sur cette page

WorkerScript QML Type

Permet l'utilisation de threads dans une application Qt Quick. Plus d'informations...

Import Statement: import QtQml.WorkerScript

Propriétés

Signaux

Méthodes

Description détaillée

Utiliser WorkerScript pour exécuter des opérations dans un nouveau fil d'exécution. Ceci 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é.

Les messages peuvent être transmis entre le nouveau thread et le thread parent à l'aide de sendMessage() et du gestionnaire onMessage().

Voici un 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 travailleur ci-dessus spécifie un fichier JavaScript, "script.mjs", qui gère les opérations à effectuer dans le nouveau fil d'exécution. Voici 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ù dans le rectangle, sendMessage() est appelé, ce qui déclenche le gestionnaire WorkerScript.onMessage() dans script.mjs. Ce dernier 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 il est exécuté en mode JavaScript strict.

Si un worker script porte l'extension ".js", il est considéré comme contenant des instructions JavaScript simples et est exécuté en mode non strict.

Remarque : chaque élément WorkerScript instanciera un moteur JavaScript distinct afin de garantir une isolation parfaite 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

Étant donné que la fonction WorkerScript.onMessage() est exécutée dans un thread séparé, le fichier JavaScript est évalué dans un contexte distinct du moteur QML principal. Cela signifie que, contrairement à un fichier JavaScript ordinaire importé dans QML, le site script.mjs 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 contextuelles définies sur l'objet QML par l'intermédiaire de QQmlContext.

En outre, il existe des restrictions sur les types de valeurs qui peuvent être transmises au script de travailleur et à partir de celui-ci. Voir la documentation de 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]

Elle indique si le site WorkerScript a été initialisé et s'il est prêt à recevoir des messages via WorkerScript.sendMessage().

source : url

Ce champ 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 analysé comme un module ECMAScript et exécuté en mode strict. Sinon, il est considéré comme un simple script.

Documentation sur le signal

message(jsobject msg)

Ce signal est émis lorsqu'un message msg est reçu d'un script de travail dans un autre thread par le biais d'un appel à sendMessage().

Note : Le gestionnaire correspondant est onMessage.

Documentation de la méthode

void sendMessage(jsobject message)

Envoie le message message à un gestionnaire de script de travail dans un autre thread. L'autre gestionnaire de script ouvrier peut recevoir ce message par l'intermédiaire du gestionnaire onMessage().

L'objet message ne peut contenir que des valeurs des types suivants :

  • booléen, nombre, chaîne
  • objets et tableaux JavaScript
  • Objets ListModel (tout autre type de QObject* n'est pas autorisé)

Tous les objets et tableaux sont copiés sur le site message. À l'exception des objets ListModel, toute modification apportée par l'autre thread à un objet transmis à message ne sera pas répercutée sur 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.