WorkerScript QML Type
Ermöglicht die Verwendung von Threads in einer „ Qt Quick “-Anwendung. Mehr...
| Import Statement: | import QtQml.WorkerScript |
Eigenschaften
Signale
- message(jsobject msg)
Methoden
- void sendMessage(jsobject message)
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.