Portierung von C++-Anwendungen auf Qt 6 mit Clazy-Checks

Wir haben einige Checks und Fixits in das Clazy-Framework implementiert, die Ihnen helfen, Ihre Anwendungen von Qt 5 auf Qt 6 zu portieren. In ihren eigenen Worten: "Clazy ist ein Compiler-Plugin, das es Clang ermöglicht, die Semantik von Qt zu verstehen". Holen Sie sich Clazy(https://invent.kde.org/sdk/clazy) und lesen Sie weiter, um die Portierung auf Qt 6 reibungsloser zu gestalten.

Clazy-Prüfungen können als Plugin während der Kompilierung oder über eine JSON-Kompilierungsdatenbank mit clazy-standalone ausgeführt werden. Die Korrekturen werden später mit clang-apply-replacements angewendet.

Clazy-Prüfungen für die Portierung von Qt 6

Die folgenden Checks sind dafür gedacht, die Portierung von Qt 5 auf Qt 6 zu erleichtern.

  • qt6-deprecated-api-fixes
  • qt6-header-fixes
  • qt6-qhash-signature
  • qt6-fwd-fixes
  • missing-qobject-macro

Die Checks müssen gegen Qt 5 ausgeführt werden, der korrigierte Code wird nur gegen Qt 6 kompiliert. Aus diesem Grund müssen die oben genannten Tests in einem Rutsch durchgeführt werden. Clazy empfiehlt, einen Test nach dem anderen auszuführen, um Konflikte bei der Anwendung von Korrekturen zu vermeiden, aber dies ist keine Option, wenn diese Prüfungen als Plugin ausgeführt werden.

Wie man Clazy-Prüfungen anwendet

Wie Sie Ihr Projekt so einrichten, dass es mit Clazy läuft und wie Sie die Prüfungen auswählen und anwenden, wird hier ausführlich erklärt: https://invent.kde.org/sdk/clazy#setting-up-your-project-to-build-with-clazy.

Wenn Sie die Prüfungen nicht als Plugin, sondern über eine JSON-Kompilationsdatenbank laufen lassen wollen, müssen Sie clazy-standalone verwenden. Eine Anleitung finden Sie unter https://invent.kde.org/sdk/clazy#clazy-standalone-and-json-database-support.

Kurz gesagt, vorausgesetzt, Sie haben eine aktuelle Clazy-Version installiert, wird im Folgenden erklärt, was zu tun ist, um die Checks als Plugin laufen zu lassen.

Richten Sie Ihr Projekt so ein, dass es mit Clazy läuft.

Wenn Sie qmake verwenden

Fügen Sie die folgenden Zeilen zu Ihrem qmake-Befehl hinzu, je nach Betriebssystem:

-spec linux-clang QMAKE_CXX="clazy"
-spec macx-clang QMAKE_CXX="clazy"

Für Windows mit MSVC fügen Sie QMAKE_CXX="clazy-cl.bat" hinzu.

Führen Sie qmake aus.

Bei Verwendung von CMake

Fügen Sie: -DCMAKE_CXX_COMPILER=clazy zum cmake-Befehl hinzu.

Führen Sie cmake aus.

Wählen Sie die Prüfungen aus:

export CLAZY_CHECKS="qt6-deprecated-api-fixes,qt6-header-fixes,
qt6-qhash-signature,qt6-qlatin1stringchar-to-u,qt6-fwd-fixes,missing-qobject-macro"

Aktivieren Sie die Fixits:

export CLAZY_EXPORT_FIXES=ON

Legen Sie die Verzeichnisse fest, die von Clazy ignoriert werden sollen:

export CLAZY_IGNORE_DIRS=.*lib_dir.*

Dadurch wird verhindert, dass Clazy die Dateien der Bibliotheken überprüft. Dies ist notwendig, wenn die Pfade der Bibliotheken mit -I und -F anstelle von -isystem und -framework eingebunden werden. Dies ist auch notwendig, um Warnungen der qt-header-fixes Prüfung zu vermeiden, wenn die Header, die die Prüfung auslösen, in den eingebundenen Bibliotheksdateien enthalten sind.

Kompilieren Sie Ihren Code.

Während der Kompilierung werden .yaml Dateien neben den Quelldateien erstellt.

Um die Korrekturen anzuwenden, führen Sie aus:

clang-apply-replacements <path_to_yaml_files>

Dadurch werden die Quelldateien geändert, denken Sie daran, Ihren Code zu sichern.

Wenn es Konflikte zwischen den Fixits gibt, werden Sie benachrichtigt und keine Datei wird geändert.

Nicht alle Portierungen können mit automatischen Fixits durchgeführt werden. Bitte beachten Sie die Warnungen während der Kompilierung für den Code, der manuell geändert werden muss.

Wie man Clazy Checks anwendet Qt Creator

Sie können auf Clazy-Prüfungen innerhalb von Qt Creator zugreifen, indem Sie Tools > Options > Analyzer (oder Qt Creator > Preferences > Analyzer unter macOS).

Sie müssen Ihre eigene Konfiguration erstellen und die Clazy-Prüfungen für die Portierung auswählen, die Sie unter den Abschnitten Level 2 und Manual Level in Qt Creator Version 4.14.1 oder höher finden können. Sie können den qt6-Filter verwenden, um die meisten der Prüfungen zu finden. Achten Sie darauf, dass Sie nur die Prüfungen auswählen, die in der oben genannten Liste enthalten sind.

"Filtering Qt 6 checks"

Hinweis: Wir empfehlen Ihnen, alle anderen Prüfungen mit Ausnahme der Portierungsprüfungen abzuwählen, um die Anwendung von Korrekturen zu erleichtern und unnötige Konflikte zu vermeiden.

Um die Prüfungen auszuführen, wählen Sie Analyze > Clang-Tidy and Clazy.

Weitere Informationen zum Konfigurieren und Ausführen von Clazy-Checks finden Sie unter Qt Creator: Using Clang Tools.

Ein Wort der Warnung

Innerhalb von Qt Creator wird nicht vor Konflikten zwischen Fixits gewarnt. Wenn es mehr als ein Fixit in derselben Zeile gibt, seien Sie vorsichtig, wenn Sie die Fixits anwenden.

Sobald ein Fixit angewendet wurde, schlägt eine erneute Prüfung fehl, da der neue Code nur gegen Qt 6 kompiliert werden kann.

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