Qt QML Compiler
Das Modul Qt QML Compiler enthält gemeinsame Funktionen, die von QML-Werkzeugen wie dem Qt Quick Compiler und qmllint benötigt werden. Es stellt auch das QQmlSA Framework zur Verfügung, das zur Erweiterung der eingebauten Analysefähigkeiten der Werkzeuge verwendet werden kann.
Verwendung des Moduls
Die Verwendung der C++-API eines Qt-Moduls erfordert das Linken gegen die Modulbibliothek, entweder direkt oder über andere Abhängigkeiten. Mehrere Build-Tools bieten hierfür spezielle Unterstützung, darunter CMake und qmake.
Bauen mit CMake
Verwenden Sie den Befehl find_package()
, um die benötigte Modulkomponente im Paket Qt6
zu finden:
find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)
Weitere Einzelheiten finden Sie in der Übersicht Bauen mit CMake.
Bauen mit qmake
Um das Modul für die Erstellung mit qmake zu konfigurieren, fügen Sie das Modul als Wert der Variable QT
in der .pro-Datei des Projekts hinzu:
QT += QmlCompiler
Verwendung des QQmlSA-Frameworks
Das Modul Qt QML Compiler bietet das Framework QQmlSA, das Werkzeuge für die statische Analyse von QML-Code bereitstellt. Diese Werkzeuge können helfen, die syntaktische Gültigkeit sicherzustellen und vor QML-Anti-Patterns zu warnen. Das Hinzufügen einer statischen Analyse zu einem QML-Programm erfolgt durch das Schreiben von Plugins. Diese führen eine Sammlung von Analysedurchläufen über die Elemente und Eigenschaften des QML-Codes aus. Die Übergänge können bei einem PassManager registriert werden, der die Übergänge speichert und aufgerufen werden kann, um ein Element und seine Kinder zu analysieren. Ein Pass ist eine Prüfung auf eine bestimmte Regel oder Bedingung, die für Elemente oder Eigenschaften ausgewertet wird. Wenn die Bedingung erfüllt ist, kann der Pass den Benutzer vor einem Problem im Code warnen und vielleicht sogar eine Lösung vorschlagen. Ein Pass wird so genannt, weil die Analyse von Elementen und Eigenschaften durch die aufeinanderfolgende Ausführung einer Reihe von Passes erfolgt. Jeder Durchlauf sollte nur für die Identifizierung eines bestimmten Problems verantwortlich sein. Durch die Kombination einer Reihe von Durchläufen können komplexere Analysen durchgeführt werden, die zusammen ein Plugin bilden. Elementpässe werden durch zwei Hauptkomponenten definiert, nämlich shouldRun()
und run()
. Bei der Durchführung der Analyse führt der Pass-Manager den Pass für jedes Element aus, auf das er beim Durchlaufen der untergeordneten Elemente des Wurzelelements stößt. Wenn die Auswertung von shouldRun()
für jedes Element true
ergibt, wird run()
für dieses Element ausgeführt. Übergänge auf Eigenschaften werden bei drei verschiedenen Ereignissen ausgelöst, nämlich wenn die Eigenschaft gebunden wird, wenn sie gelesen wird und wenn auf sie geschrieben wird. Diese können durch Überschreiben der Funktionen onBinding()
, onRead()
und onWrite()
implementiert werden. Wenn der Code wächst, wächst auch die Anzahl der Elemente und Eigenschaften. Die Durchführung der statischen Analyse für alle diese Elemente kann teuer werden. Aus diesem Grund ist es gut, bei der Entscheidung, welche Elemente und Eigenschaften analysiert werden sollen, granular vorzugehen. Für Elemente ist shouldRun()
als billige Prüfung gedacht, um festzustellen, ob run()
, das die eigentliche Berechnung durchführt, ausgeführt werden sollte. Bei Eigenschaften erfolgt die Auswahl bei der Registrierung der Pässe beim Manager. Die Funktion registerPropertyPass()
nimmt die Zeichenketten moduleName
, typeName
und propertyName
als Argumente entgegen. Diese werden verwendet, um die Menge der Eigenschaften, die von dem registrierten Durchgang betroffen sind, einzugrenzen.
Beispiele
Das QML Static Analysis Tutorial zeigt, wie man das QQmlSA
Framework verwendet, um einen benutzerdefinierten qmllint Pass zu erstellen.
Referenz
- Qt QML Compiler C++ Classes - die vom QmlCompiler-Modul bereitgestellte C++-API
- QML-Tooling unter Verwendung der statischen Analysefunktionen
© 2025 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.