Aujourd'hui, c'est la sixième fois que de nouvelles fonctionnalités sont publiées dans la série Qt 6, avec de petits et grands ajouts qui rendent le développement UI et backend plus productif et plus amusant. Plusieurs de ces nouvelles fonctionnalités sont des aperçus technologiques, et l'équipe est impatiente de recevoir vos commentaires afin de pouvoir tout mettre en place pour la prochaine version LTS !
Commençons par quelques points forts pour les développeurs d'interfaces utilisateur.
Aperçu technologique : Mises en page réactives avec Qt Quick
Les interfaces utilisateur écrites avec Qt ont toujours bénéficié du fait que le système de mise en page s'occupe de positionner et de dimensionner les différents éléments. Il en résulte des interfaces utilisateur redimensionnables qui s'affichent correctement dans tous les environnements. Cependant, jusqu'à présent, il fallait un peu d'effort manuel pour créer des interfaces utilisateur qui adaptent la disposition elle-même de manière dynamique, par exemple en fonction de l'espace disponible sur l'écran ou de l'orientation. Cela peut impliquer de masquer certains éléments et d'en afficher d'autres, de remplacer des parties de la présentation ou même de reconstruire complètement la structure de la présentation.
Avec Qt 6.6, un nouvel élément de présentation est introduit dans Qt Quick, le LayoutItemProxy. Avec ce proxy, les concepteurs d'interface utilisateur peuvent créer et basculer entre différentes dispositions, généralement en se liant aux propriétés géométriques de la fenêtre, et le proxy se charge de placer automatiquement les éléments de l'interface utilisateur dans la structure de disposition actuellement active. Pour donner plus de contrôle sur la façon dont les mises en page distribuent leur contenu, Qt Quick Layouts a appris à connaître les tailles uniformes des cellules pour les mises en page en ligne, en colonne et en grille.
Parmi les autres nouvelles fonctionnalités du module Qt Quick, citons la prise en charge des modes de sélection dans TableView, la modification de l'index racine dans TreeView, un meilleur contrôle de la décélération du défilement dans un flickable et la simplification automatique des chemins d'accès.
Aperçu technologique : Qt Graphs
Le module Qt Graphs combinera les fonctionnalités des anciens modules Qt DataVisualization et Qt Charts, basés sur l'OpenGL, en un seul framework Qt 6 moderne. Avec cette première version de Qt Graphs, un premier pas est fait dans cette direction, en se concentrant sur les fonctionnalités actuellement fournies par Qt DataVisualization. Avec Qt Graphs, les applications peuvent visualiser de grandes quantités de données changeant rapidement, en utilisant une variété de techniques de visualisation telles que les graphiques à barres, les graphiques de dispersion et les graphiques de surface. L'implémentation utilise l'interface matérielle de rendu de Qt 6 et s'appuie sur Qt Quick 3D. Ainsi, tous les rendus sont accélérés par le matériel en utilisant le système graphique natif, et la visualisation 3D s'intègre de manière transparente dans la gestion de scène et la fonctionnalité d'interaction fournies par Qt Quick 3D.
Le module fait l'objet d'un développement actif, la recherche se concentrant sur une architecture permettant une gestion efficace et cohérente des données dans tous les cas d'utilisation, ainsi que sur une architecture de rendu performante pour les graphiques. Jetez un coup d'œil à ce prototype datant du début de l'année pour vous faire une idée de ce qui peut être réalisé avec Qt Graphs :
Capture de fenêtre dans Qt Multimedia
Avec Qt 6.5, la prise en charge de la capture d'écran dans Qt Multimedia a été introduite. Avec Qt 6.6, cette fonctionnalité est étendue pour permettre aux applications de capturer des fenêtres individuelles. L'API QWindowCapture et son équivalent QML permettent d'accéder à la liste des fenêtres capturables, de sorte que les applications qui souhaitent mettre en œuvre le partage d'écran ou de fenêtre peuvent facilement fournir aux utilisateurs finaux un choix de fenêtres. La prise en charge de la capture de fenêtres est disponible avec le backend FFmpeg sur toutes les plates-formes de bureau, à l'exception des systèmes basés sur Wayland.
QMediaRecorder a en outre été étendu avec de nouvelles propriétés pour le contrôle de la qualité vidéo, de la résolution et des débits binaires.
Améliorations de Qt GRPC et Qt Protobuf
Suite à l'introduction de Qt GRPC et Qt Protobuf dans Qt 6.5 en tant qu'aperçus technologiques, Qt 6.6 apporte des améliorations significatives à QtGRPC et QtProtobuf. De nouvelles options comme QGrpcChannelOptions et QGrpcCallOptions facilitent grandement la configuration des canaux et des appels. Ces options prennent désormais en charge un mécanisme de délai, limitant le temps d'exécution maximal de l'appel ou du flux. Le nouveau QGrpcMetadata permet aux utilisateurs de définir les métadonnées du client et de lire les métadonnées renvoyées par le serveur. Dans la nouvelle version, QtGRPC a intégré un support de type QML pour les classes client QtGRPC auto-générées.
Dans QtProtobuf, certains types de Qt Core et Qt GUI peuvent maintenant faire partie du schéma *.proto. Les données implicitement partagées pour les classes QProtobufMessage permettent un accès efficace dans les contextes QML. Le support du type google.protobuf.Any a été ajouté. De plus, le type oneof, similaire à une union dans protobuf, améliore la flexibilité de la modélisation des données.
Qt WebEngine ajoute des API pour accéder aux paramètres de confidentialité et de sécurité
Les applications qui utilisent Qt WebEngine pour rendre du contenu web peuvent désormais utiliser des API pour accéder aux paramètres de confidentialité et de sécurité. Cela permet de mieux contrôler le comportement du moteur d'exécution Chromium et de désactiver les fonctionnalités non souhaitées. Par exemple, le drapeau QWebEngineUrlScheme::FetchApiAllowed peut être utilisé pour désactiver ou activer l'API HTML5 Fetch pour les schémas d'URL personnalisés, et l'attribut QWebEngineSettings:: DisableReadingFromCanvas permet à une application de désactiver la lecture à partir du canevas en tant que protection contre l'empreinte digitale.
Une autre fonctionnalité utile ajoutée à Qt WebEngine est la prise en charge d'une nouvelle URL chrome://qt, qui affiche une page contenant des informations sur la version de Chromium utilisée.
Contrôle fin du rendu pour les développeurs d'applications
Une nouvelle API dans le type Font de Qt Quick permet aux concepteurs d'interface utilisateur de configurer des caractéristiques spécifiques de mise en forme des polices OpenType, et le module Qt Quick Shapes peut désormais utiliser un moteur de rendu de courbe expérimental qui produit un rendu anticrénelé de meilleure qualité des courbes à l'aide d'un nuanceur de fragment spécialisé.
L'abstraction de l'interface matérielle de rendu de Qt fournit une API commune de bas niveau pour développer du code contre les sous-systèmes de rendu natifs de la plateforme, tels que OpenGL, Vulkan, Metal, et Direct3D, qui peut maintenant aussi utiliser D3D12. Pour Qt 6.6, l'équipe a commencé à ouvrir et à documenter les API RHI, avec le même niveau d'engagement de compatibilité que pour les API QPA : des changements incompatibles au niveau des sources et des binaires peuvent se produire entre les versions mineures de Qt, mais pas au cours d'un cycle de publication de correctifs. Cela permet aux développeurs d'applications d'écrire du code de bas niveau, multiplateforme, qui fonctionne sur toutes les piles graphiques pertinentes.
Un travail similaire est actuellement en cours pour Qt Quick 3D, où les futures versions de Qt donneront aux développeurs d'applications un contrôle fin sur le pipeline de rendu. Dans Qt 6.6, Qt Quick 3D a déjà appris à créer des données de texture et des géométries de maillage de manière procédurale à partir de QML.
Qt TextToSpeech : Générer des données PCM et faciliter la gestion du texte et de la voix
Suite à la sortie initiale de Qt TextToSpeech dans Qt 6.4, l'une des demandes les plus fréquentes ayant été reçues était que le framework serait beaucoup plus utile s'il pouvait générer des données PCM avec la parole générée, en plus de la lecture de la parole sur le périphérique audio. Avec Qt 6.6, cette fonctionnalité a été ajoutée à l'API C++ QTextToSpeech::synthesize. Appelez cette fonction avec un lambda pour recevoir les données PCM en vue d'un traitement ultérieur. Les autres améliorations comprennent un meilleur contrôle de la mise en file d'attente des segments de texte, des API de requête pour trouver les voix correspondantes et une API pour vérifier les capacités prises en charge par le moteur actuel.
Qt pour Python : Prise en charge d'asyncio et amélioration de l'outillage
Python supporte les opérations asynchrones à travers les coroutines, et asyncio est le paquetage le plus connu pour implémenter le support des mots-clés respectifs et les intégrations de boucles d'événements. Qt 6.6 ajoute la prise en charge d'asyncio en tant qu'aperçu technologique, en s'assurant que le traitement des événements par Qt n'entre pas en conflit avec le traitement des tâches dans asyncio.
Qt Creator trouve, ajoute et met à jour les environnements virtuels existants, installe des roues et autorise un nouvel environnement virtuel pour chaque nouveau projet Python.
Les utilisateurs de Qt Installer pourront installer les roues Qt pour Python dans le cadre de l'installation normale de Qt. De plus, les roues commerciales de Qt pour Python pourront être installées facilement avec le nouvel outil qtpip. Les utilisateurs qui ont besoin d'installer les roues Qt pour Python pourront utiliser qtpip aussi facilement que pip normal pour le faire.
Enfin, Qt pour Python est désormais compatible avec AArch64, ce qui rend Qt pour Python disponible sur les systèmes embarqués 64 bits.
Mise à jour de la prise en charge des plates-formes
Qt pour Android prend désormais en charge Android 13 et utilise AndroidX par défaut. Le niveau de SDK supporté est maintenant de 33, ce qui correspond aux exigences du Play Store.
Pour l'environnement de bureau, la prise en charge de Windows et Linux pour l'architecture ARM est en cours de développement. La distribution de Qt 6.6 n'inclut pas de paquets binaires pour ces plateformes, mais vous pouvez créer votre propre version de Qt 6.6 pour ces plateformes en utilisant le même processus que pour l'architecture x86. Avec Qt 6.7, la mise à disposition des paquets ARM officiels est prévue pour tous les systèmes d'exploitation de bureau.
Pour les systèmes embarqués, le support Yocto a été mis à jour avec la dernière version "Mickledore", et un travail a été réalisé avec une série de vendeurs de matériel pour fournir des paquets Boot2Qt pré-construits pour les cartes NXP, le dispositif Renesas R-Car, et diverses autres plateformes. Les créateurs d'appareils qui maintiennent leur propre Qt Board Support Package bénéficieront des améliorations apportées au QBSP Test Bench pour s'assurer que les tests de Qt sont tous verts.
Le travail avec le projet Debian s'est poursuivi et un nouveau groupe de mainteneurs de Qt 6 a été créé. Grâce à cette collaboration, des paquets Qt 6 sont désormais disponibles pour Debian 11 et Debian 12 dans les dépôts de distribution habituels. Les paquets commerciaux de Qt 6.6 sont disponibles à partir d'un dépôt Debian hébergé par The Qt Company. Grâce à ce travail, les utilisateurs de systèmes Linux basés sur Debian, qu'ils soient commerciaux ou Open Source, peuvent maintenir leur installation de Qt en utilisant les flux de travail habituels d'apt-get. Cela inclut les cartes embarquées qui utilisent nativement des distributions Debian ou Ubuntu, comme le Raspberry Pi 4.
Les nombreuses petites choses qui font une grande différence
Ce qui précède est une liste des nouvelles fonctionnalités les plus importantes, et comme chaque version mineure, Qt 6.6 apporte de nombreuses petites améliorations aux classes et outils existants.
Les API de permission sont maintenant disponibles à partir de QML, QWidget a reçu une surcharge pratique pour définir toute la chaîne de focus en une seule fois, et les conteneurs Qt ont reçu des surcharges assign() pour remplacer la charge utile existante sans aucune allocation de mémoire. De nombreuses API de Qt qui opèrent sur les durées ont maintenant des surcharges pour std::chrono, de sorte qu'un minuteur peut être démarré avec une valeur littérale de 10s. De même, de nombreuses API qui travaillent avec des horodateurs ont maintenant des surcharges prenant une QTimeZone, ce qui peut aider à réduire le nombre de conversions coûteuses entre l'UTC et l'heure locale, par exemple lorsque l'on travaille avec des dates de fichiers.
Dans le module Qt Sql, les gens de Mimer SQL ont contribué à un plugin pour leur base de données, et le pilote MySQL/MariaDB a appris de nouvelles options de connexion.
Les formats de presse-papiers personnalisés ou spécifiques à une plateforme peuvent à nouveau être implémentés, en utilisant les nouvelles classes de convertisseurs pour macOS et Windows, et le module Qt PDF fournit des classes pratiques pour accéder aux liens, obtenir des vignettes de pages et sélectionner des pages.
Les développeurs ciblant la plateforme WebAssembly peuvent profiter de cycles de développement plus rapides, d'un débogage plus facile et d'une meilleure maintenance grâce à la prise en charge de la liaison dynamique et aux améliorations apportées au QtLoader. L'équipe continue de travailler sur le renforcement de la prise en charge de la liaison dynamique afin que les applications puissent être déployées en production avec des bibliothèques Qt partagées et des plugins.
Le code source QML qui a été compilé n'a plus besoin d'être inclus avec le binaire de l'application, et le linter QML prend en charge les extensions pour les règles personnalisées. Le travail sur le serveur de langage QML se poursuit et constituera une étape importante dans l'amélioration de l'expérience des développeurs QML dans Qt Creator, ou tout autre IDE supportant le protocole du serveur de langage, tel que Visual Studio Code.
Source : Annonce de la sortie de Qt 6.6
Et vous ?
Que pensez-vous de cette nouvelle version de Qt ?
Quelles sont les nouveautés que vous trouvez utiles et intéressantes ?
Voir aussi
Qt 6 est disponible. Cette version est compatible C++ 17, apporte une nouvelle architecture graphique et s'accompagne du module Qt Quick 3D pour la création de scènes 3D complexes
Qt 6.3 est disponible avec une prise en charge améliorée de Wayland et ajoute le module Qt Language Server
Qt 6.4 est disponible, elle apporte plus de fonctionnalités aux types TableView et TreeView, et des animations plus fluides dans Qt Quick