Porting from Qt 5 to Qt 6 using Clazy checks
If you are looking for some help to port from Qt 5 to Qt 6, look no further. Within the Clazy framework, we've implemented some checks and fixits dedicated to help porting your Qt-based project.
Those checks can be run using Clazy as a compiler plugin, using clazy-standalone on a .json file or from within Qt Creator.
Clazy is a a compiler plugin which allows clang to understand Qt semantics, providing warnings and fixits for a lot of C++ Qt code. Developed by Sergio Martins, it is developed under the KDE umbrella. If you install the Qt Creator binary packages provided, clazy is already included!
Clazy checks dedicated to Qt 6 porting
When possible, the checks provide a fixit, if not, only a warning is generated. The checks have to be run against Qt 5, and the fixed code will only compile with Qt 6. For this reason, the checks need to be run together, and not one after the other as recommended by Clazy.
Here is the list of Clazy checks dedicated to Qt 6 porting:
|qt6-deprecated-api-fixes||APIs that have been deprecated in Qt 5.15 have been removed from Qt 6. The check spots those APIs and offers a replacement, with a fixit or not, depending on the API.|
|qt6-header-fixes||From Qt 5 to Qt 6, some headers have been moved. This checks replaces the obsolete path with the Qt 6 one.|
|qt6-qhash-signature||This check corrects the signature for
|qt6-fwd-fixes||This check warns against forward declarations that are present in
|missing-qobject-macro||This check finds
Let's now explore how to run those checks on a project.
Running the porting checks using Clazy as a plugin
First, you need to get Clazy or make sure your version is up to date. Version 1.10 will contain a corrected check for the deprecated API fixes, in the mean time please use the master branch.
Then you need to set up your project to run with Clazy.
If you are using qmake add the following to you command line, as appropriate to your OS:
-spec linux-clang QMAKE_CXX="clazy"
-spec macx-clang QMAKE_CXX="clazy"
For Windows with MSVC add:
If you are using cmake add:
to your command line.
To enable only the checks related to Qt 6 porting use
export CLAZY_CHECKS="qt6-deprecated-api-fixes, qt6-header-fixes,
To enable the fixits:
Also set the directories to be ignored by Clazy:
This will prevent Clazy checks from running on the libraries' files.
Run qmake or cmake, and compile your project. For each source file, a
<source_file_name>.clazy.yaml file is created at the source file location. It contains the summary of the checks' results and the fixits' instructions, for the source file and the header files it includes.
To apply the fixits run clang-apply-replacements on the path to your project directory. Doing this modifies the source and header files, consider backing up your code. If there are conflicts in the fixits, you are informed, and nothing is modified.
Applying Clazy checks and fixits within Qt Creator
In order to have all the Clazy checks dedicated to Qt 6 porting, you need to have a Qt Creator version 14.4.1 or up.
After opening your project in Qt Creator you need to select the Clazy checks to be run during the analysis. This is done in the 'Options' or 'Preferences' window, under 'Analyzer'. Once the checks are selected and saved within a new configuration you can run the analysis. The result of the checks are listed in a dedicated frame. Select the fixit and apply it.
For a detailed description on how to run the Clazy checks in Qt Creator please visit this page.
Within Qt Creator the conflicts between fixits are not warned against. You have to be careful when applying fixits related to different checks happening on a same line.
A full description of Clazy - how to get it but also how to apply the checks and fixits - can be found here.
Instructions on how to use clazy-standalone are here.
We also have a page dedicated to Qt 6 porting here.
If you happen to find any, bugs should be reported here and assigned to the author of this post.
Feedback from users are always welcome! In particular, please let us know if you've found this tool useful or if you see the need for additional checks.
Subscribe to our newsletter
Try Qt 6.1 Now!
Download the latest release here: www.qt.io/download.
Qt 6 was created to be the productivity platform for the future, with next-gen 2D & 3D UX and limitless scalability.
Explore Qt World
Check our Qt demos and case studies in the virtual Qt World
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.
Näytä tämä julkaisu Instagramissa.
Want to build something for tomorrow, join #QtPeople today! We have loads of cool jobs you don’t want to miss! http://qt.io/careers #builtwithQt #software #developers #coding #framework #tool #tooling #C++ #QML #engineers #sales #tech #technology #UI #UX #CX #Qt #Qtdev #global #openpositions #careers #job
Henkilön Qt (@theqtcompany) jakama julkaisu