Développer en Qt : le choix du multiplate-forme

 

Entretien avec Jonathan Courtois (28/05/2013)

Jonathan est développeur C++/Qt, certifié par Nokia. Il a été co-responsable de l'équipe Qt de Développez.com de 2010 à 2012 (Johnlamericain, c'est lui ;-)).
L'ouvrage
Créer des applications avec Qt 5 est écrit sous sa direction.

 


Jonathan, tu es développeur C++/Qt et tu viens de te mettre à ton compte. Comment en es-tu venu à te spécialiser dans le C++/Qt ?

Le C++ est le premier langage que j'ai étudié en profondeur durant mes études et un grand nombre de ses principes m'ont beaucoup plu. Ayant toujours été intéressé par les problèmes d’ergonomie et d’expérience utilisateur (venant d'une déception de certains logiciels), je me suis renseigné sur les différentes bibliothèques graphiques en C++, j'avais alors le choix entre GTK, wxWidget et Qt. Après un premier projet réalisé avec le framework Qt dans sa version 4.3 (réalisation d'un jeu d'échecs), j'ai très vite été séduit par la philosophie de cette entreprise (à l'époque Trolltech) et les directions qu'elle prenait. J'ai par la suite continué à me spécialiser dans le C++ et effectué un stage de portabilité d'une application à base de MFC sur Qt pour être multiplate-forme. C'est à partir de là que j'ai entendu parler des Qt Dev Days, qui se déroulaient à Munich à l'époque, et avec un ami nous avons décidé de tenter notre chance et de demander des réductions en tant qu'étudiant pour les conférences. À notre grande surprise, la responsable nous a carrément offert des places, et il ne nous restait plus que le voyage à nos frais. Nous avons fait le déplacement et avons rencontré de nombreuses personnes qui partageaient notre motivation pour l'utilisation du framework ainsi que de le faire partager au plus grand nombre. À la même époque, je rejoignais la rubrique Qt de Developpez.com et j'ai décidé de me spécialiser dans le C++/Qt.


Quels sont les points forts de Qt selon toi par rapport aux solutions concurrentes ?

Pour moi LE point fort c'est le côté multiplate-forme du framework, on développe un programme une fois et il est utilisable sur plusieurs plates-formes. Aujourd'hui nous avons un parc informatique mondial pour les ordinateurs de bureau qui est composé de trois systèmes d'exploitation (Windows, Mac OS et Linux) et en tant que développeur individuel ou entreprise, nous espérons que notre programme soit utilisé par le plus grand nombre. C'est facilement possible en utilisant le framework Qt qui fait abstraction des bibliothèques natives de chaque système d'exploitation et permet d'écrire un seul code qui s'adapte à la plateforme de destination. De plus, Qt Creator, l'environnement de développement intégré de Qt peut également être utilisé sur chaque système facilitant la diversité des développeurs au sein d'un projet. La différence en comparaison des autres boîtes à outils (toolkit) graphiques en C++ c'est qu'il fait des interfaces visuellement jolies et qu'il est très complet (réseau, base de données, etc.).


Et qu'en est-il des plates-formes mobiles ?

L'équipe du framework a misé sur un nouveau type d'interface déclarative pour les plates-formes mobiles : Qt Quick. Cette technologie devient mature avec la version 2 incluse dans Qt 5 et commence à prendre le pas sur le choix des développeurs. Qt avait misé sur la plateforme Meego qui n'a pas été un grand succès auprès du public. Il tente de se rattraper en proposant des portages sur Android, iOS et BlackBerry pour la dernière version majeure Qt 5 avec une technical preview sur 5.1 et une version plus définitive prévue pour 5.2. La technologie est trop jeune pour savoir si les applications Qt seront massivement portées sur les smartphones mais c'est en tout cas l'objectif du Qt Project. 


De nombreux outils prétendent produire du multiplate-forme à partir d'un code unique, mais dans la pratique, il reste un travail non négligeable d'adaptation. Qu'en est-il réellement avec Qt ?

Il est vrai que la théorie et la pratique ne font parfois pas bon ménage, cela vient essentiellement du fait que les environnements natifs sont sur certains points très différents et qu'il n'est tout simplement pas possible de faire un équivalent sur les autres plates-formes. De plus, si l'on prend par exemple les utilisateurs Mac OS qui ont l'habitude d'un type d'interface particulier concernant le positionnement des boutons, du menu, des raccourcis clavier ou du système de docking, il n'est pas possible d'avoir une seule et même apparence sur toutes les plates-formes sous peine de se voir rejeter par un type d'utilisateur. Cela dit le travail des développeurs Qt est quand même très simplifié grâce à l'abstraction de la plateforme dans le code, et les parties de codes qui ont besoin d'être natifs pour un comportement spécifique représente moins de 1% des lignes de code d'une application traditionnelle écrit en C++/Qt.


Quels sont les modules Qt que tu utilises le plus ? Ceux que tu préfères ? Que tu trouves les plus aboutis ?

Étant principalement développeur d'interface graphique, j'utilise les modules Qt Gui et Qt Widgets de façon intensive et plus particulièrement le framework Graphics View. Je manipule également de façon quotidienne Qt Core à travers la lecture/écriture dans des fichiers, les QSettings, etc. Ces modules sont suffisamment anciens pour être très stables. Qt WebKit est également très intéressant lorsque l'on veut faire des applications hybrides avec du web intégré.

Je n'utilise pas à l'heure actuelle Qt Quick dans mon travail car les projets sur lesquels je travaille ont commencé avant la sortie de Qt Quick 1 et n'ont donc pas choisi cette technologie. La version 2 de Qt Quick avec les Qt Controls commence à être suffisamment aboutie pour être utilisée sur des plus gros projets.

Pour moi le module Qt Multimedia a toujours été le moins abouti et il est difficile de se passer de bibliothèques tierces lorsque l'on veut faire du traitement vidéo ou audio.


Qt 5 marque une évolution majeure dans le développement du framework. En particulier Qt Quick est en train de supplanter Qt Widgets. Mais certains nouveaux outils ne sont pas encore aussi aboutis ou aussi stables que les anciens. Faut-il néanmoins conseiller Qt 5 pour les nouveaux projets ?

Je pense que cela dépend du projet, des besoins et également des performances nécessaires pour l'application. Le temps de formation, des développeurs connaissant déjà les Qt Widgets, pour passer à Qt Quick est également un facteur important à prendre en compte pour un chef de projet. Pour faire ce choix, il est nécessaire de bien savoir ce qui va devoir être implémenté d'un point de vue de l'interface graphique et se renseigner si cela est possible avec Qt Quick. Une bonne démarche serait de faire des prototypes pour toutes les parties critiques de l'interface graphique en Qt Quick (Qt Quick étant très pratique pour faire des prototypes) et permettre ainsi de faire les bons choix pour le projet. De plus il est très facile de faire un mixte entre Qt Widgets et Qt Quick pour un nouveau projet. La partie principale de l'interface utilisant Qt Widgets et certaines parties spécifiques utilisant Qt Quick. Cela est le cas pour Qt Creator par exemple, l'équipe a décidé de migrer petit à petit des composants en full Qt Quick, l'écran d'accueil ayant été l'une des premières parties à avoir été transformé.


Et pour les projets existants, que peut apporter une migration vers la version 5 ?

Les nouvelles fonctionnalités sont nombreuses comme Qt Webkit 2 (version asynchrone du framework WebKit), Qt Quick 2, les Qt Quick Components (dans 5.1), le support des plates-formes Android et iOS à partir de 5.1, ainsi que le support de C++ 11 pour n'en citer que quelques-unes. La migration est relativement facile selon la taille du projet mais comme tout changement d'une version majeure, il faut être prêt à avoir des régressions sur le code fonctionnant bien avec Qt 4. Une des raisons est que les plates-formes desktop (Windows, Linux, Mac OS) ont été ré-implémentées dans la version 5 pour utiliser QPA (Qt Platform Abstraction) et ainsi agir comme n'importe quelle plate-forme supportée par Qt (dans la version 4, les plates-formes de bureau était indépendante car historiquement les plus anciennes en comparaison des plates-formes mobiles). Une grosse partie du code a été portée ou réécrite, et il est évident que des bogues sont apparus lors de cette migration. J'en ai fait l’expérience lors de la migration de gros projets en entreprise, il est donc nécessaire de bien planifier ces étapes de migration en faisant des tests avec Qt 5 sur un système autre que l'environnement de production et de ne répercuter les changements sur la production qu'une fois l'ensemble des fonctionnalités de l'application durement testées.


Merci, Jonathan, pour cet entretien. Souhaites-tu ajouter quelque chose ?

Merci également. J'ajouterais qu'il ne faut surtout pas hésiter à participer au framework à travers le Qt Project, ne serait-ce qu'en reportant les problèmes que vous rencontrez ou en participant à l'amélioration de ses fonctionnalités.