Die Qt Company hat die Veröffentlichung des Qt 6.11 Frameworks bekannt gegeben, das die Arbeit an der Stabilisierung und Erweiterung der Funktionen des Qt 6 Zweigs fortsetzt. Qt 6.11 bietet Unterstützung für die Plattformen Windows 10+, macOS 13+, Linux (Ubuntu 22.04/24.04, openSUSE 15.6/16, SUSE 15 SP6, RHEL 8.10/9.6/10, Debian 11.6/12), iOS 17+, Android 9+(API 23+), webOS, WebAssembly, INTEGRITY, VxWorks, FreeRTOS und QNX. Die Quelltexte der Qt Komponenten werden unter den Lizenzen LGPLv3 und GPLv2 bereitgestellt. Qt 6.11 erhielt den Status eines Zwischenrelease, dessen öffentliche Unterstützung für 6 Monate (+ weitere 6 Monate für kommerzielle Nutzer) bereitgestellt wird.
Wesentliche Änderungen in Qt 6.11:
- Das Modul Qt Canvas Painter wurde hinzugefügt, das eine API für die hardwarebeschleunigte Darstellung von 2D-Inhalten bereitstellt und sich an der HTML-Spezifikation Canvas 2D Context orientiert. Für die Darstellung wird die RHI (Rendering Hardware Interface) Engine verwendet, die verschiedene 3D-APIs (OpenGL, Vulkan, Metal und Direct 3D) unterstützt, wodurch eine signifikante Leistungssteigerung erzielt werden konnte. In Tests war der Qt Canvas Painter auf einem typischen Lenovo ThinkPad P16 Gen 2 doppelt so schnell wie QPainter mit OpenGL-Backend, fünfmal so schnell auf einem günstigen Lenovo Tab M10 HD Android-Tablet und zehnmal so schnell auf einem hochmodernen Samsung Galaxy Tab S8 Android-Tablet.

Neben der hohen Leistung implementiert Qt Canvas Painter Unterstützung für erweiterte Funktionen wie anpassbares Anti-Aliasing, umrandende Farbverläufe und Schatten (QCanvasBoxGradient und QCanvasBoxShadow ähnlich der CSS-Eigenschaft box-shadow), Netzmuster (QCanvasGridPattern), benutzerdefinierte Shader-Pinsel und Farbeffekte zur Anpassung von Transparenz, Helligkeit, Kontrast und Sättigung.

- Die Funktionalität des Qt Quick 3D-Moduls ähnelt den Möglichkeiten von Spiel-Engines. Unterstützung für das Rendering-Verfahren SSGI (Screen Space Global Illumination) wurde hinzugefügt, um die Lichtreflexion von Oberflächen in der Nachbearbeitungsphase zu simulieren (eine Alternative zum Backen von Lichtkarten) und SSR (Screen Space Reflections) für die realistische Darstellung von Reflexionen in Echtzeit. Der Algorithmus zur Glättung von bewegten Objekten wurde durch die Generierung von Bewegungsvektoren für jedes Objekt verbessert. Anpassen von Rendering-Pässen (Render-Pass), die direkt aus QML für Schichtmasken, Nachbearbeitungseffekte und Farbzuweisungen (Color Picking) verwendet werden können, wurde implementiert. Neue APIs für Schichten und Tags wurden hinzugefügt, die es ermöglichen, einzelne Rendering-Pässe zu steuern, Elemente in verschiedenen Phasen der Render-Pipeline zu aktivieren und in Ziel-Rendering-Puffer umzuleiten.

- Die Möglichkeiten des Qt Graphs-Moduls wurden erweitert. Ein neuer Typ namens CustomSeries wurde hinzugefügt, der es ermöglicht, eigene Grafiken zu erstellen, bei denen ein benutzerdefinierter Delegat für das Zeichnen jedes Datenelements verantwortlich ist. In 3D-Grafiken wurde die Unterstützung für mehrere Achseninstanzen implementiert. Zum Beispiel können in QBar3DSeries separate Achsen für rowAxis, valueAxis und columnAxis verwendet werden, während in QScatter3DSeries und QSurface3DSeries getrennte Achsen für axisX, axisY und axisZ genutzt werden. Neue Eigenschaften zum Überschreiben von Farben für einzelne Achsen, zur Anpassung von Farbverläufen in Grafiken, zur Änderung des Linienstils und zur Positionierung von Beschriftungen wurden hinzugefügt. Ein Beispiel zur Erstellung anpassbarer 2D- und 3D-Diagramme — Wind Turbine Dashboard — wurde ebenfalls eingefügt.

- Ein experimentelles Modul Qt TaskTree wurde hinzugefügt, das einen deklarativen Ansatz zum Erstellen und Ausführen asynchroner Aufgaben in C++ bietet. Zu den Schlüsselaspekten von Qt TaskTree gehören: „Rezepte“ — wiederverwendbare Objekte, die den asynchronen Arbeitsablauf beschreiben; „Gruppen“ — definieren Richtlinien für untergeordnete Aufgaben; „Speicher“ für den gemeinsamen Datenaustausch zwischen Aufgaben; „Iteratoren“ für Schleifen und die Wiederholung von Aufgaben. Qt TaskTree löst ebenfalls das Problem der Inkompatibilität zwischen APIs, indem verschiedene asynchrone APIs in eine einheitliche Schnittstelle integriert werden.

- Die Möglichkeiten zur Arbeit mit animierter Vektorgrafik, die aus Bildern in den Formaten SVG und Lottie erstellt wird, wurden erweitert. Das Qt Quick VectorImage-Modul und das lottietoqml-Tool wurden stabilisiert. Unterstützung für Morphing-Animationen, SVG-Masken, SVG-Symbole und Matte Layer (zur Steuerung der Sichtbarkeit einer anderen Ebene) wurde hinzugefügt.
- Im Qt Quick Controls wurde die Komponente DoubleSpinBox hinzugefügt. Im DialogButtonBox wurde die Möglichkeit zur Steuerung der Verarbeitung von Standardtasten implementiert. Im Effekt RectangularShadow gibt es jetzt eine unabhängige Steuerung der Eckenradien.
- Im Qt Widgets wurde in QWizard die Option StretchBanner hinzugefügt; im QAbstractItemView wurde der Parameter keyboardSearchFlags implementiert, um das Verhalten der Suche beim Drücken von Tasten anzupassen; in QColumnView wurde eine Eigenschaft zur Steuerung der Sichtbarkeit der Vorschau hinzugefügt.
- Das Modul Qt OpenAPI wurde hinzugefügt, das die automatische Generierung von HTTP-Client-Code ermöglicht, der die Qt Networks RESTful API basierend auf einer OpenAPI-Spezifikation im YAML-Format verwendet.
- Im Modul Qt GRPC wurde ein Mechanismus zur Steuerung des Flusses und des Inhalts von Anfragen und Antworten hinzugefügt.
- Im Modul Qt HTTP Server wurden die Verwaltungsmöglichkeiten für Limits erweitert und die Bearbeitung von Antworten im Arbeitsprozess verbessert. In QNetworkRequest kann jetzt die Konfiguration der TCP Keep Alive-Parameter eingestellt werden (standardmäßig werden inaktive Verbindungen nach 2 Minuten automatisch beendet).
- Im QML Language Server, der für die Integration mit IDE verwendet wird, wurden Informationen zum Ort der Typdefinition von QML im C++-Code hinzugefügt, um die Navigation zwischen QML und C++ aus der IDE zu erleichtern — beim Arbeiten mit C++-Code können QML-Objekte anhand von IDs gefunden werden, und die Hierarchie der QML-Kontexte kann leicht durchlaufen werden.
- Zusätzlich zu QRangeModel wurde die Klasse QRangeModelAdapter implementiert, die eine C++-API zur Änderung der Modaldaten bereitstellt und über das Protokoll QAbstractItemModel interagiert, was die Datenübertragung aus dem Backend-Code nach C++ in Qt Quick oder Qt Widget vereinfacht.
- Die Unterstützung für die Android-Plattform 16 wurde hinzugefügt. Die Funktionalität der Google Play Feature Delivery zur Aufteilung der Anwendung in Pakete wurde implementiert (das Hauptpaket wird sofort aus Google Play installiert, während zusätzliche bei Bedarf heruntergeladen werden). Für Android Automotive wurde die Unterstützung für den Start von Qt ohne Android-Abhängigkeiten für einen schnellen Start der Darstellung implementiert.
Zusätzlich ist die vor Kurzem veröffentlichte Version der integrierten Entwicklungsumgebung Qt Creator 19 zu erwähnen, die für die Erstellung plattformübergreifender Anwendungen mit der Qt-Bibliothek bestimmt ist. Sowohl die Entwicklung klassischer Programme in C++ als auch die Verwendung der Sprache QML wird unterstützt, in der JavaScript zur Definition von Skripten verwendet wird und die Struktur sowie die Parameter der Benutzeroberflächenelemente durch CSS-ähnliche Blöcke festgelegt werden. Fertige Builds sind für Linux, Windows und macOS verfügbar.
Zu den Neuerungen gehört der Minimalkartenmodus (Preferences > Text Editor > Display > Enable minimap), der neben der Bildlaufleiste eine Miniaturansicht des gesamten Inhalts anzeigt und es ermöglicht, den gesamten Code auf einen Blick zu erfassen. Integriert ist ein einfacher MCP-Server zur Integration von KI-Assistenten, der das Öffnen von Dateien und Projekten, das Starten von Builds und das Debuggen ermöglicht. Die Einrichtung von Builds auf externen Geräten wurde vereinfacht — es gibt jetzt die Schaltfläche Run Auto-Detection, die nach der Registrierung des Geräts die Qt-Version, den Compiler, den Debugger und CMake automatisch erkennt. Direkter Zugriff auf die Dateisysteme angeschlossener Geräte, Android-Geräte und Emulatoren wurde implementiert.

Quelle: opennet.ru





