La société Qt Company a publié la version du framework Qt 6.11, poursuivant ainsi le travail de stabilisation et d'enrichissement des fonctionnalités de la branche Qt 6. Qt 6.11 prend en charge les plateformes 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 et QNX. Le code source des composants Qt est fourni sous les licences LGPLv3 et GPLv2. Qt 6.11 a été déclaré version intermédiaire, dont le support public sera assuré pendant 6 mois (+ 6 mois supplémentaires pour les utilisateurs commerciaux).
Principales modifications dans Qt 6.11 :
- Le module Qt Canvas Painter a été ajouté, offrant une API pour le rendu 2D accéléré par matériel, conçu en tenant compte de la spécification HTML Canvas 2D Context. Pour le rendu, le moteur RHI (Rendering Hardware Interface) est utilisé, prenant en charge diverses API 3D (OpenGL, Vulkan, Metal et Direct 3D), permettant ainsi d'obtenir une amélioration significative des performances. Dans les tests réalisés, Qt Canvas Painter s'est révélé deux fois plus rapide que QPainter avec le backend OpenGL sur un ordinateur portable typique Lenovo ThinkPad P16 Gen 2, cinq fois plus rapide sur une tablette Android économique Lenovo Tab M10 HD et dix fois plus rapide sur la tablette Android haut de gamme Samsung Galaxy Tab S8.

En plus de sa haute performance, Qt Canvas Painter prend en charge des fonctionnalités avancées telles que le lissage personnalisable (antialiasing), des dégradés de bordure et des ombres (QCanvasBoxGradient et QCanvasBoxShadow similaires à la propriété CSS box-shadow), des motifs en grille (QCanvasGridPattern), des pinceaux de shader personnalisés et des effets colorés pour modifier la transparence, la luminosité, le contraste et la saturation.

- La fonctionnalité du module Qt Quick 3D se rapproche des capacités des moteurs de jeux. Un support pour la technique de rendu SSGI (Screen Space Global Illumination) a été ajoutée pour simuler le reflet de la lumière sur les surfaces lors de la post-traitement (alternative au baking des cartes d'éclairage (lightmap)) et SSR (Screen Space Reflections) pour un rendu réaliste des réflexions en temps réel. L'algorithme de lissage des objets en mouvement a été amélioré grâce à la génération de vecteurs de mouvement pour chaque objet. Des passes de rendu personnalisables (render-pass) ont été mises en œuvre, pouvant être utilisées directement depuis QML pour les masques de couches, les effets de post-traitement et la détermination des objets par couleur (color picking). De nouvelles interfaces logicielles pour les couches et les balises ont été ajoutées, permettant de gérer des passes de rendu individuelles, l'activation d'éléments à différentes étapes du pipeline de rendu et le redirectionnement vers des tampons de rendu cibles.

- Les capacités du module Qt Graphs ont été étendues. Un type CustomSeries a été ajouté, permettant de créer des graphiques personnalisés où un délégué défini par l'utilisateur est responsable du rendu de chaque élément de données. Dans les graphiques 3D, le support de plusieurs instances d'axes a été implémenté, par exemple, dans QBar3DSeries, il est possible d'utiliser des axes séparés pour rowAxis, valueAxis et columnAxis, tandis que dans QScatter3DSeries et QSurface3DSeries, des axes distincts pour axisX, axisY et axisZ. De nouvelles propriétés ont été ajoutées pour remplacer les couleurs des axes individuels, configurer les dégradés sur les graphiques, modifier le style des lignes et positionner les étiquettes. Un exemple de création de graphiques 2D et 3D personnalisés appelé Wind Turbine Dashboard a été ajouté.

- Un module expérimental Qt TaskTree a été ajouté, fournissant une approche déclarative pour créer et exécuter des tâches asynchrones en C++. Les composants clés de Qt TaskTree sont : des « recettes » - des objets réutilisables décrivant un workflow asynchrone ; des « groupes » - définissant des politiques pour les tâches enfants ; un « stockage » pour le partage de données entre les tâches ; des « itérateurs » pour les boucles et la réexécution des tâches. Qt TaskTree résout également le problème d'incompatibilité entre les API, en unifiant différents API asynchrones en une interface typique.

- Les fonctionnalités pour travailler avec des graphiques vectoriels animés générés à partir d'images aux formats SVG et Lottie ont été étendues. Le module Qt Quick VectorImage et l'outil lottietoqml ont été stabilisés. La prise en charge des animations de morphing, des masques SVG, des symboles SVG et des couches de masques (matte layer, pour gérer la visibilité d'une autre couche) a été ajoutée.
- Un composant DoubleSpinBox a été ajouté aux Qt Quick Controls. Dans DialogButtonBox, la possibilité de gérer le traitement des boutons par défaut a été implémentée. L'effet RectangularShadow dispose désormais d'un contrôle indépendant des rayons des coins.
- Dans Qt Widgets, une option StretchBanner a été ajoutée à QWizard ; dans QAbstractItemView, un paramètre keyboardSearchFlags a été mis en œuvre pour configurer le comportement de recherche lors de l'appui sur les touches ; une propriété a été ajoutée dans QColumnView pour gérer la visibilité de l'aperçu.
- Un module Qt OpenAPI a été ajouté, permettant de générer du code de client HTTP utilisant l'API RESTful de Qt Networks, basé sur une spécification OpenAPI au format YAML.
- Le module Qt GRPC a ajouté un mécanisme pour contrôler le flux et le contenu des requêtes et des réponses.
- Dans le module Qt HTTP Server, les outils de gestion des limites ont été étendus et le traitement des réponses dans le fil de travail a été amélioré. Dans QNetworkRequest, il est maintenant possible de configurer les paramètres TCP Keep Alive (par défaut, les connexions inactives sont automatiquement terminées après 2 minutes).
- Dans le serveur de langage QML, utilisé pour l'intégration avec les IDE, des informations sur l'emplacement de la définition du type QML dans le code C++ ont été ajoutées pour simplifier la navigation entre QML et C++ depuis l'IDE — en travaillant avec le code C++, il est possible de trouver des objets QML par leurs identifiants et de naviguer facilement dans la hiérarchie des contextes QML.
- En plus de QRangeModel, une classe QRangeModelAdapter a été réalisée, fournissant une API C++ pour modifier les données du modèle en interagissant via le protocole QAbstractItemModel, ce qui simplifie le transfert de données du code backend en C++ vers Qt Quick ou Qt Widget.
- La prise en charge de la plateforme Android 16 a été ajoutée. La fonctionnalité Google Play Feature Delivery a été mise en œuvre pour diviser l'application en paquets (le paquet principal est installé depuis Google Play immédiatement, tandis que les paquets supplémentaires sont téléchargés selon les besoins). Pour Android Automotive, un support pour lancer Qt sans dépendances Android a été réalisé pour un démarrage rapide du rendu.
Il convient de noter également la publication récente de la version intégrée de l'environnement de développement Qt Creator 19, conçu pour créer des applications multiplateformes utilisant la bibliothèque Qt. Il prend en charge à la fois le développement d'applications classiques en C++ et l'utilisation du langage QML, où JavaScript est employé pour définir les scénarios et où la structure et les paramètres des éléments d'interface sont spécifiés par des blocs similaires à CSS. Des versions précompilées sont proposées pour Linux, Windows et macOS.
Parmi les nouveautés, on trouve le mode minimap (Préférences > Éditeur de texte > Affichage > Activer la minimap), qui affiche à côté de la barre de défilement un mini-aperçu de tout le contenu, permettant d'apercevoir l'ensemble du code d'un coup d'œil. Un serveur MCP simple est intégré pour l'intégration avec des assistants AI, permettant d'ouvrir des fichiers et des projets, de lancer des compilations et d'effectuer des débogages. La configuration des compilations sur des appareils externes a été simplifiée — un bouton Détection automatique a été ajouté pour identifier automatiquement la version de Qt, le compilateur, le débogueur et CMake après l'enregistrement de l'appareil. La prise en charge de l'accès direct aux systèmes de fichiers des appareils connectés, des appareils Android et des émulateurs a été mise en œuvre.

Source : opennet.ru





