Nach einer langen Vorbereitungsphase wurde Version 6 des Qt-Frameworks Ende des Jahres planmäßig veröffentlicht. Die plattformübergreifende Bibliothek ist die erste Hauptversion seit acht Jahren und bringt einige grundlegende Änderungen an der Architektur mit sich, darunter eine neue Ebene für 3D-Grafiken, die Verbindung zu C ++ 17 und ein erweitertes Qt-Quick-3D-Modul.
Wie bei neuen Hauptversionen sind die grundlegenden Änderungen normalerweise mit Inkompatibilitäten oder fehlerhaften Änderungen verbunden. Nach eigenen Angaben hat die Qt Company jedoch versucht, die auf Entwicklerseite erforderlichen Codeänderungen während der Konvertierung so gering wie möglich zu halten. Fast alle in Qt 6 entfernten APIs werden in der neuesten LTS-Version (Long-Term Support) Qt 5.15 wahrscheinlich als veraltet markiert.
Flexibel in Bezug auf die 3D-API
Eine zentrale Änderung wurde seit Qt 5.14 in das Framework aufgenommen, wurde jedoch unter Qt 5.15 als technische Vorschau markiert, die eine explizite Aktivierung über eine Umgebungsvariable erfordert: Das Framework entfernt die feste Verbindung zu OpenGL als Schnittstelle für 3D-Grafiken und bringt eine neue Ebene namens Rendering Hardware Interface (RHI).
Die vollständigen 3D-Grafiken in Qt Quick basieren auf der Abstraktionsebene. Standardmäßig verwendet das Framework Direct3D unter Windows und Metal unter macOS. Es kann auch Vulkan und nach wie vor OpenGL oder OpenGL ES verwenden.
Qt Quick 3D und Qt 3D
In Version 5.14 wurde Qt Quick 3D zunächst als technische Vorschau eingeführt. Entwickler können das Modul verwenden, um 3D-Szenen in der QML-Skriptsprache zu definieren und einheitliche 3D- und 2D-Renderings zu entwickeln. Sie können Qt-Quick-Inhalte unter anderem als Texturen für 3D-Objekte verwenden. Das Das Qt-Quick-3D-Modul bringt zahlreiche Anpassungen an Qt 6 einschließlich der Ausrichtung auf die RHI-Verbindung. Darüber hinaus gibt es Verbesserungen für die Interaktion von 2D- und 3D-Objekten und eine verbesserte Integration für das Rendern von gITF2-Inhalten (GL Transmission Format).
Wenn Sie nicht wechseln möchten, finden Sie die benutzerdefinierten Lektionen von OpenGL im QtOpenGL
-Modul. Das auch neue Modul QtShaderTools
Ermöglicht den Zugriff auf die verschiedenen Shader-Sprachen für die 3D-APIs und verwendet die Zwischensprache SPIR-V (Standard Portable Intermediate Representation).
Frischer (er) C ++ Standard
Bei der Verbindung mit C ++ basiert Qt 6 auf C ++ 17, das nicht dem neuesten C ++ 20-Sprachstandard entspricht, aber Qt war C ++ 11 von Version 5.7 bis Version 5.15. Mit der Verbindung zu C ++ 17 greift Qt 6 unter anderem von C ++ aus auf die Eigenschaftsbindungen in Qt zu.
Auch das Team hat es oft kritisiert QList
-Ändern Sie die Klasse, die einen Umweg bei der Speicherzuordnung macht, und neue Elemente in der Liste als void*
-Pointer speichert, die auf tatsächliche Elemente verweisen. Qt 6 standardisiert die Implementierung jetzt mit denen der anderen Containerklasse QVector
und die Implementierung der letzteren Klasse dient als gemeinsame Architektur.
Darüber hinaus hat das Qt-Team dies im Oktober getan hat einen Blog-Beitrag veröffentlichtnach den Klassen, die für das Qt-Metaobjektsystem wesentlich sind QMetaType
und QVariant
fast vollständig mit einer Verbindung zu C ++ 17 neu geschrieben.
Plattformen und Build-System
Es ist auch erwähnenswert, dass Qt 6 jetzt plattformspezifische APIs direkt im Kern enthält. Bisher waren sie in den einzelnen Modulen QtX11Extras
, QtWinExtras
beziehungsweise QtMacExtras
ausgelagert. Mit der neuen Architektur Unter anderem müssen die Ereignisverarbeitung, die Integration von Fenstern und Typkonvertierungen besser in die Sonderfunktionen des Zielsystems integriert werden. Darüber hinaus ersetzt ein Mechanismus für native Schnittstellen die vorherigen Plattform-Header.
Qt 6 hat kürzlich CMake für das Build-System verwendet. Die Qt Company baute die Bibliothek damit und empfiehlt die Verwendung für Qt-Projekte. Sie möchte jedoch weiterhin das interne qmake während des gesamten Lebenszyklus von Qt 6 unterstützen.
Nicht perfekt
Das Blogbeitrag zur Veröffentlichung beschreibt Qt 6.0 als Ausgangspunkt für die nächste Qt-Generation und gibt zu, dass es noch nicht so vollständig ist wie Qt 5.15. Das Team möchte die Lücken in den kommenden Monaten schließen. Am Ende des Blogposts möchte sich das Team bei allen Beteiligten bedanken. Tausende hätten mit Fehlerberichten und Rückmeldungen geholfen, und die Qt 6 Was ist neu? listet die Namen der 274 Personen auf, die aktiv an der Entwicklung teilgenommen haben.
Dieses Jahr war nicht nur das 25-jährige Jubiläum von Qt, sondern einige Änderungen in den Lizenz- und Produktrichtlinien haben zu Unsicherheit geführt. Im Januar gab die Qt Company bekannt, dass sie LTS-Releases für gewerbliche Kunden reservieren werde. Konkret bedeutet dies, dass nur Sie die längere Unterstützung der neuesten 5.x-Version Qt 5.15 genießen können.
Im April löste eine E-Mail der KDE-Community Bedenken aus, dass die Qt Company erwägt, Open Source-Veröffentlichungen bis zu einem Jahr später als die kommerzielle Version zu veröffentlichen. Das Framework und seine Module sind in der Regel unter der LGPL- oder GPL-Lizenz erhältlich.
Mit Qt 6 gibt es auch potenziell unangenehme Innovationen im Raum für gewerbliche Kunden: Qt verkauft die aktuelle Version nur als Abonnementmodell, was einige Kunden in ein Dilemma bringt, da das unbefristete Modell nicht mehr verfügbar ist, was anfangs teurer ist, aber eine dauerhafte Zukunft darstellt Sicherheit und nicht von möglichen Preis- und Lizenzänderungen.
(Arm)