IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par Stéphane le calme

140PARTAGES

12  0 
Le Qt Contributors Summit s’est achevé cette semaine. La conférence rassemblait une centaine de contributeurs au projet Qt pour discuter de son avenir. L’un des principaux sujets de discussion a été la prochaine version majeure de Qt 6, la prochaine occasion pour casser la compatibilité du code existant et donc de revisiter certains choix de conception qui ne seraient plus adaptés au développement moderne (ce qui inclut également la liste des fonctionnalités désapprouvées lors de la vie de Qt 5).


Le premier et principal changement prévu concerne la version de C++ : actuellement, seul C++11 est autorisé, tant pour développer Qt que dans son interface (aux débuts de Qt 5, c’était encore C++98…). Qt 6 se baserait exclusivement sur C++17 (puisque la norme C++20 ne serait probablement pas finalisée à temps).

Qt 6 n’arrivera pas de sitôt : il faudra au moins attendre après Qt 5.14 (au moins dix-huit mois), c’est-à-dire en 2020.

Les développeurs gardent en tête les problèmes de portage causés par le passé, afin de minimiser l’impact pour ceux qui devront mettre à jour leur version de Qt. Certaines API pourraient cependant changer pour devenir plus faciles d’utilisation — quitte à perdre légèrement en performance — : pour les utilisateurs, il est plus profitable d’avoir un outil facile à utiliser que plus performant, puisque les applications arriveront plus vite aux utilisateurs (et probablement avec moins de défauts).

La compatibilité binaire sera aussi probablement cassée, afin de réduire la consommation de mémoire et d’implémenter certains algorithmes plus efficacement.

Plus dans le détail, quelques modifications déjà prévues :

  • côté accessibilité : pour le moment, toute l’accessibilité (pour décrire l’interface de l’application à des outils comme des synthétiseurs vocaux) se base sur une copie de la hiérarchie des widgets et des composants. Cette manière de procéder est assez coûteuse en ressources et fragile (au moindre écart entre les hiérarchies, l’application peut planter). L’idée serait de fusionner l’interface d’accessibilité avec les widgets, de telle sorte que la hiérarchie ne soit plus dupliquée. Les données correspondant à l’accessibilité ne seraient allouées en mémoire que lorsqu’elles sont requises, ce qui reviendrait à une surcharge en mémoire d’un pointeur dans le cas de base ;
  • côté Qt WebEngine : le code entre l’implémentation à base de widgets et pour Qt Quick présente une certaine quantité de doublons, qui devrait être limitée. Le démarrage et l’arrêt du moteur Web sont actuellement décrits comme des hacks, leur implémentation devrait être améliorée. Plus important, l’API de QWebEnginePage devrait être retravaillée : il ne devrait pas être nécessaire de créer des classes dérivées aussi souvent. QWebEngineCallback devrait disparaître au profit de la bibliothèque standard : std::function. Toutes les classes pourraient finir dans un espace de noms QtWebEngine, au lieu d’avoir un préfixe à rallonge (QWebEngine) ;
  • côté Qt Widgets : certaines parties de l’API ont été placées dans Qt Widgets au lieu du module plus général Qt GUI avec la modularisation de Qt 5, mais leur place est probablement dans Qt GUI. Il s’agirait de QFileSystemModel (un modèle dont les données proviennent d’un système de fichiers) et des fonctionnalités d’annulation-restauration des actions. De même, la classe QSvgWidget aurait plus sa place dans le module Qt SVG ;
  • côté Qt UI Tools : ce module de chargement dynamique d’interfaces (similaire à Qt Designer) a toujours fonctionné comme une bibliothèque statique. Cependant, cette manière de procéder a un impact sur la licence : le module était sous licence BSD ou commerciale. Avec Qt 6, il devrait être possible de l’utiliser comme une bibliothèque partagée : il passera alors sous la même licence que le reste de Qt (LGPL ou commerciale) ;
  • côté style : le même code pourrait être utilisé pour les widgets et Qt Quick, à condition de retirer les dépendances trop fortes envers les widgets ;
  • côté Qt Quick : le moteur de rendu et le graphe de scène pourraient voir de grands changements arriver. L’objectif changera légèrement : le moteur actuel est orienté vers les applications 2D, mais s’ouvrira à l’intégration avec des moteurs 3D (comme Unity), de réalité virtuelle ou augmentée. Qt Quick servirait alors uniquement à la partie interface en 2D, avec l’affichage réalisé dans une texture réutilisée par une autre application. Les changements seraient assez profonds, mais simples : QQuickScene serait le point d’entrée, au lieu de QQuickWindow, qui ne serait dès lors plus nécessaire pour une application Qt Quick. Plus d’API de rendu seraient gérées : OpenGL et le rendu logiciel seront toujours gardés, mais complétés par Direct3D 12, Vulkan et d’autres.


Voir aussi : la liste des changements déjà proposés pour Qt 6.
Source : Qt Contributors’ Summit 2018 wrap-up.
Vous avez lu gratuitement 4 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de epsilon68
Membre expérimenté https://www.developpez.com
Le 10/12/2020 à 0:22
je pense qu'ils m'ont perdu quand ils ont joué avec la licence...
d'un autre coté, .net core avance tres vite, bientot MAUI pour de l'UI multiplateforme,
donc je regarde encore Qt mais d'un seul oeil ... on sait jamais, mais plus le temps passe moins je regarde...
1  1 
Avatar de der§en
Membre expérimenté https://www.developpez.com
Le 10/12/2020 à 17:13
Moi, j'ai décroché, quand il fallait mettre du javascript pour faire les UI des programmes en C++.

Apparemment, ils sont en train de revenir au "full C++" et je ne dis pas que je ne vais pas y jeter un oeil...
0  0 
Avatar de defZero
Membre extrêmement actif https://www.developpez.com
Le 10/12/2020 à 19:07
@epsilon68, +1. En effet le coups sur le changement de licence leurs a quand même fait mauvaise presse, mais à côté de ça, il n'y a pas de véritable alternatives à part peut-être Delphi, donc l'équipe Qt peut bien se le permettre.

@der§en, Oui, enfin faire du Qt et faire du C++ sont 2 choses différentes.
Je rappellerais qu'entre C et C++ il n'y avait qu'un préprocesseur, alors venir qualifié Qt de "full C++", mouuuais c'est limite.
Quand à l'ajout de JS dans QtQuick, c'est quand même relativement plus facile et compréhensible de décrire ses UI avec des langages de plus au niveau, qui plus est sans avoir à gérer soit même les durées de vie de chaque objets, enfin je trouve personnellement mais ce n'est qu'un avis.

Pour ce qui est de Qt6, c'est une bonne chose qu'ils aient inclus des abstractions plus bas niveau et plus optimisé, mais ça a quand même était pas mal facilité par le fait que les API spécifiques aux plateformes ont de plus en plus tendance à converger dans leurs fonctionnement.
Par exemple pour la 3D, si RHI à été rendue possible, c'est bien parce que DX12, Metal et Vulkan ont bien simplifier la tache je pense (donc merci M$, Apple et Khronos ).
0  0 
Avatar de epsilon68
Membre expérimenté https://www.developpez.com
Le 11/12/2020 à 0:21
ben si il y a d'autres options que Qt:
- d'abord la licence est beaucoup trop chere
- sur desktop C# / WPF ou WinUI
- sur mobile React Native (js) ou Xamarin (C#) ou Flutter (dart)

Après, c'est un choix aussi valide de n'implementer une appli que sur 1 seule plateforme, par exemple C++ / objective C / swift sur ios / macos, ou de developper une couche C pour binder sur du C#

des solutions il y en a pleins en fait, et gratuites.

et rares sont les decideurs qui vont choisir C++, trop verbeux, dur et difficile à mettre en oeuvre.
0  0 
Avatar de Jbx 2.0b
Membre chevronné https://www.developpez.com
Le 11/12/2020 à 9:19
Pour ma part j'ai quand même l'impression qu'ils mettent Qt 3D sous le tapis pour promouvoir Qt Quick 3D. En effet la techno Qt 3D n'est plus disponible qu'en librairie additionnelle, pourquoi ? Et bien sur Qt Quick 3D, c'est GPL et commercial, donc ils ont tout intérêt à la mettre en avant.
Par contrer quand on choisit de monter un projet autour de Qt 3D en misant sur le LGPL, on a de quoi flipper...
0  0 
Avatar de archqt
Membre émérite https://www.developpez.com
Le 13/12/2020 à 14:28
- d'abord la licence est beaucoup trop chere
Exact très chère et à l'année, et tous les composants qui arrivent sont en licence Commercial ou GPL uniquement

- sur desktop C# / WPF ou WinUI
Pour linux, MacOS et Windows ou que sur Windows ? Après les performances C# sont quand même moins bonnes (je ne suis pas un spécialiste)

- sur mobile React Native (js) ou Xamarin (C#) ou Flutter (dart)
Oui mais il faut refaire le code

des solutions il y en a pleins en fait, et gratuites.
Oui mais, hélas, pas aussi abouties que Qt.


et rares sont les decideurs qui vont choisir C++, trop verbeux, dur et difficile à mettre en oeuvre.
Verbeux, pas sûr il faut juste utiliser une sous-couche du C++ (cela s'est bien amélioré par rapport au C++98). De plus avec les outils IHM (QtQuick) on peut faire des animations sans toucher au code de l'IHM. On implémente un "binding" IHM<->données en C++ et les 2 parties sont séparées.
Il n'y a pas, à ma connaissance (à part peut être FireMonkey de C++Builder) d'outils permettant de faire cela. Et bien évidemment les objets QtQuick permettant de faire cela sont sous licence commercial ou GPL.
Sous flutter il y a/avait une application qui permettait directement de faire le code de l'animation.
0  0 
Avatar de epsilon68
Membre expérimenté https://www.developpez.com
Le 13/12/2020 à 16:49
react native permet de faire ios et android et windows ... microsoft a meme sorti une version pour mac ...
flutter dart c'est pareil, c'est possible de faire une appli desktop (en preversion)
Xamarin MAUI c'est pareil

en fait c'est plutot Qt que je ne trouve pas abouti, ils ne resolvent pas les bugs, et point de vue rapidité, tu crois que QtQuick avec une VM javascript est rapide ?

bref, rien ne pourra justifier un tel prix, alors que des alternatives existent. Je mise beaucoup sur C# MAUI
0  0 
Avatar de archqt
Membre émérite https://www.developpez.com
Le 13/12/2020 à 18:15
Oui si on utilise du javascript cela ralenti, par contre le QML est compilé en C++ si l'on veut pour obtenir une pleine vitesse. Et personnellement je mets la logique de l'IHM en C++. Après on est d'accord c'est très très cher.
Les bugs il doit y en avoir comme partout je suppose.
Mais visiblement cela fonctionne dans l'automobile pour l'embarqué sinon ils ne mettraient pas un prix si élevé.

Ce qui est dommage c'est C++ Builder, vu "l'avance" qu'il avait sur les autres IDE dans les années 90 il aurait du être leader.
0  0