Firma Qt Company opublikowała wydanie frameworka Qt 6.11, w którym kontynuowane są prace nad stabilizacją i rozwijaniem funkcjonalności gałęzi Qt 6. W Qt 6.11 zapewniono wsparcie dla platform 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 i QNX. Kody źródłowe komponentów Qt dostarczane są na licencjach LGPLv3 i GPLv2. Qt 6.11 uzyskał status wydania pośredniego, wsparcie publiczne będzie świadczone przez 6 miesięcy (+ kolejne 6 miesięcy dla użytkowników komercyjnych).
Główne zmiany w Qt 6.11:
- Dodano moduł Qt Canvas Painter, oferujący API do sprzętowo przyspieszonego renderowania treści 2D, zbudowanego na podstawie specyfikacji HTML Canvas 2D Context. Do renderowania wykorzystany jest silnik RHI (Rendering Hardware Interface), wspierający różne API 3D (OpenGL, Vulkan, Metal i Direct 3D), co pozwoliło na osiągnięcie znaczącego wzrostu wydajności. W przeprowadzonych testach Qt Canvas Painter okazał się dwa razy szybszy niż QPainter z backendem OpenGL na typowym laptopie Lenovo ThinkPad P16 Gen 2, pięciokrotnie szybszy na budżetowym tablecie Android Lenovo Tab M10 HD i dziesięciokrotnie szybszy na najwyższej klasy tablecie Android Samsung Galaxy Tab S8.

Oprócz wysokiej wydajności, Qt Canvas Painter wprowadza wsparcie dla zaawansowanych funkcji, takich jak dostosowane wygładzanie (antialiasing), gradienty i cienie obramowujące (QCanvasBoxGradient i QCanvasBoxShadow podobne do właściwości CSS box-shadow), siatki wzorcowe (QCanvasGridPattern), niestandardowe pędzle szeregowe i efekty kolorystyczne do zmiany przezroczystości, jasności, kontrastu i nasycenia.

- Funkcjonalność modułu Qt Quick 3D jest zbliżona do możliwości silników gier. Dodano wsparcie dla techniki renderowania SSGI (Screen Space Global Illumination) do symulacji odbicia światła od powierzchni w etapie post-processingu (alternatywa dla wypiekania map oświetlenia (lightmap)) oraz SSR (Screen Space Reflections) do realistycznego renderowania odbić w czasie rzeczywistym. Algorytm wygładzania poruszających się obiektów poprawiono poprzez generację wektorów ruchu dla każdego obiektu. Wprowadzono konfigurowalne przejścia renderowania (render-pass), które można bezpośrednio wykorzystać z QML do masek warstw, efektów post-processingu i określania obiektów według koloru (color picking). Dodano nowe interfejsy programowania dla warstw i tagów, pozwalające na kontrolowanie poszczególnych przejść renderowania, włączanie elementów na różnych etapach cyklu renderowania (render pipeline) oraz przekierowywanie do docelowych buforów renderowania.

- Rozszerzono możliwości modułu Qt Graphs. Dodano typ CustomSeries, pozwalający na tworzenie własnych wykresów, w których renderowanie każdego elementu danych jest realizowane przez określony przez użytkownika delegat. W grafikach 3D wprowadzono wsparcie dla kilku instancji osi, na przykład w QBar3DSeries można używać oddzielnych osi dla rowAxis, valueAxis i columnAxis, a w QScatter3DSeries i QSurface3DSeries — oddzielnych osi dla axisX, axisY i axisZ. Dodano nowe właściwości do nadpisywania kolorów dla poszczególnych osi, dostosowywania gradientów na wykresach, zmiany stylu linii oraz pozycjonowania etykiet. Dodano przykład tworzenia konfigurowalnych wykresów 2D i 3D — Wind Turbine Dashboard.

- Dodano eksperymentalny moduł Qt TaskTree, oferujący deklaratywne podejście do tworzenia i wykonywania asynchronicznych zadań w C++. Kluczowymi komponentami Qt TaskTree są: „przepisy” — wielokrotnego użytku obiekty, opisujące asynchroniczny przepływ pracy; „grupy” — definiują polityki dla zadań podrzędnych; „magazyn” do współdzielenia danych między zadaniami; „iteratory” do pętli i powtarzania zadań. Qt TaskTree rozwiązuje również problem niekompatybilności między API, unifikując różne asynchroniczne API w typowym interfejsie.

- Rozszerzone możliwości pracy z animowaną grafiką wektorową, tworzoną z obrazów w formatach SVG i Lottie. Stabilizowane są moduł Qt Quick VectorImage oraz narzędzie lottietoqml. Dodano wsparcie dla animacji morphing, masek SVG, symboli SVG oraz warstw-masek (matte layer, do zarządzania widocznością innej warstwy).
- W Qt Quick Controls dodano komponent DoubleSpinBox. W DialogButtonBox wprowadzono możliwość zarządzania przetwarzaniem przycisków domyślnych. W efekcie RectangularShadow pojawiło się niezależne zarządzanie promieniami rogów.
- W Qt Widgets w QWizard dodano opcję StretchBanner; w QAbstractItemView wprowadzono parametr keyboardSearchFlags do konfigurowania zachowania wyszukiwania w miarę naciskania klawiszy; w QColumnView dodano właściwość do zarządzania widocznością podglądu.
- Dodano moduł Qt OpenAPI, który pozwala generować kod HTTP-klienta używającego RESTful API Qt Networks na podstawie specyfikacji OpenAPI w formacie YAML.
- Do modułu Qt GRPC dodano mechanizm do zarządzania strumieniem i zawartością zapytań oraz odpowiedzi.
- W module Qt HTTP Server rozszerzono środki zarządzania limitami oraz poprawiono przetwarzanie odpowiedzi w wątku roboczym. W QNetworkRequest pojawiła się możliwość konfigurowania parametrów TCP Keep Alive (domyślnie nieaktywne połączenia są automatycznie zamykane po 2 minutach).
- W QML Language Server, używanym do integracji z IDE, dodano informacje o miejscu definiowania typu QML w kodzie C++ w celu ułatwienia nawigacji między QML a C++ z IDE — podczas pracy z kodem C++ można znajdować obiekty QML po identyfikatorach i łatwo poruszać się po hierarchii kontekstów QML.
- Oprócz QRangeModel zaimplementowano klasę QRangeModelAdapter, która dostarcza API C++ do modyfikacji danych modelu, współdziałając poprzez protokół QAbstractItemModel, co upraszcza przesyłanie danych z kodu backendowego na C++ w Qt Quick lub Qt Widget.
- Dodano wsparcie dla platformy Android 16. Zrealizowano funkcjonalność Google Play Feature Delivery do podziału aplikacji na pakiety (główny pakiet instalowany jest z Google Play od razu, a dodatkowe ładowane są w razie potrzeby). Dla Android Automotive wprowadzono wsparcie dla uruchamiania Qt bez zależności od Androida w celu szybkiego rozpoczęcia renderowania.
Dodatkowo można wspomnieć o niedawno opublikowanej wersji zintegrowanego środowiska programistycznego Qt Creator 19, przeznaczonego do tworzenia aplikacji wieloplatformowych z wykorzystaniem biblioteki Qt. Obsługiwana jest zarówno rozwój klasycznych programów w języku C++, jak i użycie języka QML, w którym do definiowania scenariuszy wykorzystuje się JavaScript, a struktura i parametry elementów interfejsu są określane przez bloki przypominające CSS. Gotowe kompilacje są dostępne dla systemów Linux, Windows i macOS.
Wśród nowości wyróżnia się tryb minimap (Preferencje > Edytor Textowy > Wyświetlanie > Włącz minimap), który wyświetla obok paska przewijania miniaturowy podgląd całej zawartości, umożliwiający jednoczesne objęcie wzrokiem całego kodu. W skład wchodzi prosty serwer MCP do integracji z asystentami AI, który pozwala na otwieranie plików i projektów, uruchamianie kompilacji oraz debugowanie. Uproszczono konfigurację kompilacji na zewnętrznych urządzeniach — dodano przycisk Run Auto-Detection do automatycznego wykrywania wersji Qt, kompilatora, debuggera i CMake po zarejestrowaniu urządzenia. Zrealizowano wsparcie dla bezpośredniego dostępu do systemów plików podłączonych urządzeń, urządzeń z systemem Android i emulatorów.

Źródło: opennet.ru





