Auf dieser Seite

WorkerScript QML Type

Ermöglicht die Verwendung von Threads in einer „ Qt Quick “-Anwendung. Mehr...

Import Statement: import QtQml.WorkerScript

Eigenschaften

Signale

Methoden

Ausführliche Beschreibung

Verwenden Sie WorkerScript, um Vorgänge in einem neuen Thread auszuführen. Dies ist nützlich, um Vorgänge im Hintergrund auszuführen, damit der Haupt-GUI-Thread nicht blockiert wird.

Nachrichten können mithilfe von ` sendMessage()` und dem Handler ` onMessage() ` zwischen dem neuen Thread und dem übergeordneten Thread ausgetauscht werden.

Ein Beispiel:

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 })
    }
}

Das obige Worker-Skript gibt eine JavaScript-Datei namens „script.mjs“ an, die die im neuen Thread auszuführenden Operationen übernimmt. Hier ist ` script.mjs`:

WorkerScript.onMessage = function(message) {
    // ... long-running operations and calculations are done here
    WorkerScript.sendMessage({ 'reply': 'Mouse is at ' + message.x + ',' + message.y })
}

Wenn der Benutzer an einer beliebigen Stelle innerhalb des Rechtecks klickt, wird ` sendMessage() ` aufgerufen, wodurch der Handler ` WorkerScript.onMessage() ` in ` script.mjs` ausgelöst wird. Dieser sendet wiederum eine Antwortnachricht, die dann vom Handler ` onMessage() ` von ` myWorker` empfangen wird.

Das Beispiel verwendet ein Skript, das ein ECMAScript-Modul ist, da es die Erweiterung „.mjs“ hat. Es kann Importanweisungen verwenden, um auf Funktionen aus anderen Modulen zuzugreifen, und wird im strengen JavaScript-Modus ausgeführt.

Wenn ein Worker-Skript stattdessen die Erweiterung „.js“ hat, wird davon ausgegangen, dass es reine JavaScript-Anweisungen enthält, und es wird im nicht-strikten Modus ausgeführt.

Hinweis: Jedes „WorkerScript“-Element instanziiert eine separate JavaScript-Engine, um vollständige Isolation und Thread-Sicherheit zu gewährleisten. Sollte dies zu einem für Ihre Umgebung zu hohen Speicherverbrauch führen, sollten Sie in Erwägung ziehen, ein „WorkerScript“-Element gemeinsam zu nutzen.

Einschränkungen

Da die Funktion „ WorkerScript.onMessage() “ in einem separaten Thread ausgeführt wird, wird die JavaScript-Datei in einem von der Haupt-QML-Engine getrennten Kontext ausgewertet. Das bedeutet, dass das „ script.mjs “ im obigen Beispiel – anders als eine gewöhnliche JavaScript-Datei, die in QML importiert wird – weder auf die Eigenschaften, Methoden oder andere Attribute des QML-Elements zugreifen kann, noch auf Kontext-Eigenschaften, die über ` QQmlContext` für das QML-Objekt festgelegt wurden.

Zudem gibt es Einschränkungen hinsichtlich der Wertetypen, die an das Worker-Skript übergeben oder von diesem zurückgegeben werden können. Einzelheiten finden Sie in der Dokumentation zu „ sendMessage()“.

Worker-Skripte, die aus reinem JavaScript bestehen, können die .import-Syntax nicht verwenden. Skripte, die ECMAScript-Module sind, können import- und export-Anweisungen uneingeschränkt verwenden.

Dokumentation zu Eigenschaften

ready : bool [read-only]

Dies gilt unabhängig davon, ob der „ WorkerScript “ initialisiert wurde und bereit ist, Nachrichten über „ WorkerScript.sendMessage() “ zu empfangen.

source : url

Hier wird die URL der JavaScript-Datei gespeichert, die den ` WorkerScript.onMessage() `-Handler für Thread-basierte Operationen implementiert.

Wenn der Dateinamenteil der URL mit „.mjs“ endet, wird das Skript als ECMAScript-Modul geparst und im strengen Modus ausgeführt. Andernfalls wird es als einfaches Skript betrachtet.

Signal-Dokumentation

message(jsobject msg)

Dieses Signal wird ausgelöst, wenn eine Nachricht vom Typ „ msg “ von einem Worker-Skript in einem anderen Thread über einen Aufruf von ` sendMessage()` empfangen wird.

Hinweis: Der entsprechende Handler ist „ onMessage “.

Methodendokumentation

void sendMessage(jsobject message)

Sendet die angegebene „ message “ an einen Worker-Skript-Handler in einem anderen Thread. Der andere Worker-Skript-Handler kann diese Nachricht über den onMessage()-Handler empfangen.

Das „ message “-Objekt darf nur Werte der folgenden Typen enthalten:

  • boolean, number, string
  • JavaScript-Objekte und -Arrays
  • ListModel-Objekte (alle anderen Typen von „ QObject “* sind nicht zulässig)

Alle Objekte und Arrays werden in das ` message` kopiert. Mit Ausnahme von `ListModel`-Objekten werden Änderungen, die der andere Thread an einem in ` message ` übergebenen Objekt vornimmt, nicht auf das ursprüngliche Objekt übertragen.

© 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.