Qt 6 – Was ist neu?

Softwareprojekte mit anspruchsvollen grafischen Nutzeroberflächen werden häufig mit Hilfe von Qt umgesetzt. Das GUI-Framework bringt sowohl eine große Bibliothek von UI-Elementen als auch Module für die Umsetzung der Anwendungslogik mit. Die letzten Major Releases waren Version 4 im Jahr 2005 und Version 5 im Jahr 2012. Vor wenigen Monaten, im Dezember 2020, erschien das weit verbreitete Framework nun in der Version 6. Zeit also, sich die wichtigsten Änderungen noch einmal anzuschauen.

Build-System und Property Bindings

Eine der interessantesten Neuerungen dürfte das Thema Build-System betreffen. Bisher wurde das eigene Tool qmake benutzt, um Qt selbst zu bauen. Eigene Qt-basierte Projekte konnte man im Prinzip mit Hilfe beliebiger Build-Systeme umsetzen, z.B. CMake. Die Dokumentation und die Beispiele waren jedoch hauptsächlich auf qmake ausgerichtet. Mit der Version 6 wird nun mit Hilfe von CMake gebaut. Deswegen empfiehlt die Qt Company mittlerweile CMake auch für eigene Qt-Projekte. Der Fokus der Dokumentation hat sich entsprechend geändert und die Beispielprojekte enthalten jetzt auch CMakeLists.txt-Dateien.

Das Framework kennt zwei Ansätze zur Entwicklung der Präsentationsschicht: Qt Quick und Qt Widgets. Zu Qt Quick gehört die eigene Beschreibungssprache QML. Ein wichtiger Aspekt von QML sind die sogenannten Property Bindings. Diese erlauben das Verknüpfen von Properties, ähnlich wie bei einer Zuweisung. Im Gegensatz zu Zuweisungen bleiben Property Bindings auch aktuell, wenn sich die Werte der Properties im Programmverlauf ändern. Im folgenden QML-Beispiel wird die Temperatur in Grad Fahrenheit neu ausgewertet, wenn sich die Temperatur in Grad Celsius ändert:

Thermostat {
    defaultTempCelsius: 21.5
    defaultTempFahrenheit: defaultTempCelsius * 1.8 + 32
}

Mit Version 6 wurde dieses Konzept jetzt auch für die in C++ geschriebenen Programmteile eingeführt. Dies erlaubt das Programmieren in einem deklarativen Stil, der die Lesbarkeit des Codes erhöhen kann. Das obige Beispiel sieht dann so aus:

#include <QDebug>
#include <QProperty>

QProperty<float> defaultTempCelsius(21.5);
QProperty<float> defaultTempFahrenheit;
defaultTempFahrenheit.setBinding([&]() { return defaultTempCelsius.value() * 1.8 + 32; });
qDebug() << defaultTempFahrenheit.value(); // Outputs 70.7

defaultTempCelsius.setValue(22.0);
qDebug() << defaultTempFahrenheit.value(); // Re-evaluates the binding expression and outputs 71.6

Styling und Grafik

Mann mit Tablet und Hologramm Qt versteht sich als plattformübergreifendes Framework. Für Qt Quick waren aus Leistungsgründen bisher nur wenige, allgemeine Stylings für UI-Elemente verfügbar. Mit Version 6 sind jetzt auch Desktop-Stylings für Microsoft Windows und macOS verfügbar. Somit fügen sich Qt-Quick-Anwendungen dort zukünftig besser in den Desktop ein. Für iOS ist ein Styling in Planung; für Android und Linux Desktop nutzt man am besten die bereits vorhandenen Stylings.

Weitere Änderungen gab es im Bereich 3D-User-Interfaces und 3D-Grafik. Hier hat man die Chance genutzt, das Qt-Quick-3D-Modul grundlegend zu überarbeiten. Dabei war das Ziel, die APIs für 2D und 3D zu vereinheitlichen. Unter der Haube gab es Umbauten, um unabhängiger von OpenGL zu werden. RHI (Rendering Hardware Interface) ist eine zusätzliche Abstraktionsschicht. Diese macht es möglich, die native 3D-Grafik-API des jeweiligen Betriebssystems zu nutzen (beispielsweise Direct3D oder Metal).

Portierung und Lizenzen

Einige Klassen, Module und QML-Typen sind in Version 6 nicht mehr verfügbar. Die meisten davon wurden in der letzten 5er-Version 5.15 bereits als veraltet gekennzeichnet. Möchte man eine bestehende Qt-5-Anwendung auf Version 6 portieren, wechselt man am besten zuerst auf Version 5.15. Erst danach kommt dann der Schritt auf Version 6. Hier lohnt sich ein Blick auf den Qt 6 Porting Guide. Das Porting Tool hilft, Code automatisiert auf Inkompatibilitäten zu untersuchen (und teilweise sogar automatisch zu beheben). Wie oben erwähnt, ist qmake nicht mehr das Build-Tool für das Qt-Framework selbst. Es kann aber weiterhin für eigene Projekte eingesetzt werden.

Eine weitere Änderung wurde schon vor knapp einem Jahr eingeführt und betrifft die Lizenzierung. Qt gibt es in einer Open-Source-Edition für private und Open-Source-Projekte. Daneben gibt es noch kommerzielle Editionen. Bestimmte Versionen sind als Long Term Support (LTS) gekennzeichnet. Für diese gibt es für eine längere Zeit Updates. Seit Version 5.15 LTS haben allerdings nur noch Inhaber einer kommerziellen Lizenz Zugang zu den Updates. Laut dem Hersteller ist der Hauptgrund dafür, zeitnahes Portieren von Projekten auf aktuelle Versionen zu fördern.

Qt 6 bringt also viele spannende Änderungen mit sich. Bis eine größere Zahl von Projekten den Schritt auf die neue Version vollzieht, wird es sicher noch eine Weile dauern. Es bleibt zu hoffen, dass die Lizenzbedingungen nicht Open-Source-Projekte davon abhalten, weiter auf Qt zu setzen.