Auf dieser Seite

Qt Quick Compiler

Qt Quick Mit dem Compiler können Sie QML- und JavaScript-Code bereits zur Kompilierungszeit statt zur Laufzeit verarbeiten. Dies ermöglicht:

  • Schnellerer Start der Anwendung
  • Schnellere Auswertung von Bindungen und Funktionen

Der „ Qt Quick “-Compiler besteht aus zwei Komponenten:

Hinweis: qmltc, qmlsc und qmlcachegen sind interne Build-Tools. Wenn Sie sich um deren Aufruf kümmern müssen, schreiben Sie entweder ein Build-System oder Sie machen etwas falsch.

Der QML-Typ-Compiler

Der QML-Typ-Compiler (qmltc) kompiliert QML-Typen zu C++-Klassen. Diese C++-Klassen werden dann Ihrer Anwendung hinzugefügt und können aus anderem C++-Code instanziiert werden. Auf diese Weise können Sie einen Großteil des Overheads vermeiden, der bei der Verwendung von „ QQmlComponent “ zum Erstellen von Instanzen Ihrer QML-Typen entsteht. Um von qmltc zu profitieren, musst du deinen C++-Code anpassen und die neuen Klassen nutzen.

qmltc kann ein QML-Dokument nur kompilieren, wenn es dessen Struktur vollständig versteht. Es schlägt fehl, wenn auf ein nicht unterstütztes Sprachmerkmal gestoßen wird. Den JavaScript-Code in Bindungen und Funktionen muss es jedoch nicht verstehen.

Der QML-Skript-Compiler

Der QML-Skript-Compiler(qmlsc und qmlcachegen) kompiliert Bindungen und Funktionen sowohl in effizienten Bytecode als auch in C++-Funktionen. Dieser Vorgang läuft automatisch im Hintergrund ab, wenn Sie qt_add_qml_module zur Angabe Ihrer QML-Module verwenden. Weitere Informationen zu den verfügbaren Optionen zur Steuerung verschiedener Aspekte der QML-Kompilierung finden Sie unter Zwischenspeichern kompilierter QML-Quellen.

Zur Kompilierungszeit wird für jedes QML- oder JavaScript-Dokument eine entsprechende C++-Datei erstellt und in die Anwendung eingebunden. Die C++-Datei enthält dann eine QML-Kompilierungseinheit, die aus folgenden Elementen besteht:

  • einer effizienten Darstellung der Dokumentstruktur
  • Bytecode für alle Funktionen und Bindungen im Dokument
  • C++-Code für Funktionen und Bindungen, den der Compiler vollständig versteht

Die QML-Engine verzichtet dann darauf, den QML- oder JavaScript-Quellcode zur Laufzeit zu kompilieren, und nutzt stattdessen die vorab erstellte Kompilierungseinheit, um die QML-Komponente sowie deren Funktionen und Bindungen schneller zu laden. Die in C++ kompilierten Funktionen und Bindungen können zudem schneller ausgeführt werden. Andere Bindungen und Funktionen werden entweder direkt aus dem Bytecode interpretiert oder zur Laufzeit über einen JIT-Kompilierungsschritt in Maschinencode kompiliert. Zur Kompilierungszeit können umfassendere Typanalysen durchgeführt werden. Daher ist der generierte C++-Code in der Regel effizienter als das Ergebnis der JIT-Kompilierung.

Es gibt Einschränkungen hinsichtlich der JavaScript-Konstrukte, die nach C++ kompiliert werden können. Weitere Informationen zu diesen Einschränkungen finden Sie unter Einschränkungen bei der Kompilierung von JavaScript nach C++. Statistiken darüber, wie gut ein QML-Projekt kompiliert werden kann, finden Sie unter Abrufen von Statistiken zur Kompilierung von Funktionen und Bindungen.

qmlsc wird anstelle von qmlcachegen verwendet, wenn die „ Qt Quick “-Compiler-Erweiterungen installiert sind. Es verfügt gegenüber qmlcachegen über die folgenden zusätzlichen Funktionen:

  • Es kann Dokumente im Direktmodus kompilieren. In diesem Fall werden die C++-Header der Typen, die anderen QML-Komponenten zugrunde liegen, direkt eingebunden, und die Methoden dieser Typen werden direkt aufgerufen. Im Indirektmodus hingegen rufen qmlcachegen oder qmlsc Methoden über den Lookup-Mechanismus auf, der auch im Interpreter und im JIT verwendet wird.
  • Es kann Dokumente im statischen Modus kompilieren. In diesem Fall geht qmlsc davon aus, dass keine Eigenschaften von Typen, die für C++ freigegeben sind, durch abgeleitete Typen überschattet werden können. Dies ermöglicht die Kompilierung weiterer Bindungen und Funktionen, erzeugt jedoch ungültigen Code, wenn Eigenschaften überschattet werden.

Anstatt C++ als Ausgabe zu erzeugen, können qmlsc und qmlcachegen auch „Cache-Dateien“ der Formate .qmlc, .jsc und .mjsc generieren. Diese enthalten jeweils weiterhin eine QML-Kompilierungseinheit und können von der QML-Engine geladen werden, um eine Neukompilierung zu vermeiden. Sie dürfen jedoch nur Dokumentstruktur und Bytecode enthalten. Die Kompilierung von Bindungen und Funktionen in C++ entfällt, wenn Cache-Dateien erzeugt werden. Weder das CMake- noch das von Qt angebotene qmake-Build-System stellen diese Funktionalität bereit.

Zusammenfassung

Die folgende Tabelle fasst die Unterschiede zwischen qmltc, qmlcachegen und qmlsc zusammen:

qmltcqmlcachegenqmlsc
Kompiliert QML-Typen zu C++-KlassenKompiliert QML-Dokumente zu QML-KompilierungseinheitenKompiliert QML-Dokumente zu QML-Kompilierungseinheiten
Die generierte Ausgabe dient als schnellere Alternative zur Objekterstellung mit ` QQmlComponent`.Die generierte Ausgabe wird intern von der QML-Engine verwendet, um eine Neukompilierung zu vermeiden und die Ausführung zu beschleunigen.Die generierte Ausgabe wird intern von der QML-Engine verwendet, um eine erneute Kompilierung zu vermeiden und die Ausführung zu beschleunigen. Der Direktmodus und der statische Modus können Ihre Anwendung zusätzlich beschleunigen.
Verfügbar für alle Qt-VersionenVerfügbar für alle Qt-VersionenVerfügbar für kommerzielle Kunden

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