Créer des applications avec Qt 5

Les essentiels

Écrit sous la direction de Jonathan Courtois

par

Guillaume Belz

Thibaut Cuvelier

Ilya Diallo

Vincent Meyer

Florent Renault

Louis du Verdier

Aperçu général de l'ouvrage

Créez des applications avec Qt 5 a été conçu selon une logique thématique plutôt qu'une progression linéaire. Il est constitué d'un ensemble de modules, pouvant être lus dans l'ordre que vous voulez.

Bien sûr, si vous débutez, commencez par les chapitres correspondant à votre niveau.

Créer des applications avec Qt 5 - Les essentiels

par Guillaume Belz, Thibaut Cuvelier, Ilya Diallo, Vincent Meyer, Florent Renault, Louis du Verdier

écrit sous la direction de Jonathan Courtois

ISBN (EPUB) : 978-2-8227-0107-5

Copyright © 2013 Éditions D-BookeR

Tous droits réservés

Conformément au Code de la propriété intellectuelle, seules les copies ou reproductions strictement réservées à l'usage privé du copiste et non destinées à une utilisation collective ainsi que les analyses et les courtes citations dans un but d'exemple et d'illustration sont autorisées. Tout autre représentation ou reproduction, qu'elle soit intégrale ou partielle, requiert expressément le consentement de l'éditeur (art L 122-4, L 122-5 2 et 3a).

Publié par les Éditions D-BookeR, 5 rue Delouvain, 75019 Paris

www.d-booker.fr

contact@d-booker.fr

Ce module fait partie de l'ouvrage global intitulé : Créer des applications avec Qt 5

ISBN (HTML) : 978-2-8227-0020-7

Les exemples (téléchargeables ou non), sauf indication contraire, sont propriété des auteurs.

Conception de la couverture : Marie Van Der Marlière (www.marie-graphiste.com)

Mise en page : générée sous Calenco avec des XSLT développées par la société NeoDoc (www.neodoc.biz)

Date de publication : 13/11/2013

Édition : 1

Version : 1.01

À propos des auteurs

Guillaume Belz

Guillaume Belz est biochimiste, spécialisé dans les méthodes d'analyse haut débit. Une partie de son activité consiste à développer les outils informatiques dédiés au traitement des données générées (High Performance Computing, CUDA). Il utilise Qt pour la partie interface utilisateur et visualisation des données (2D et 3D).

Contributeur depuis plusieurs années sur les communautés en ligne (Developpez.com, OpenClassRooms – ex-Site du Zéro, QtFr.org) et auteurs de nombreuses traductions et articles sur le C++ et Qt, il possède les trois certifications Qt aujourd'hui existantes. Vous pouvez suivre ses publications sur son blog.

Thibaut Cuvelier

Thibaut Cuvelier, étudiant à l'université de Liège en ingénierie civile, s'est formé à l'informatique en autodidacte. Conscient de l'importance du partage des acquis, il contribue très activement depuis 2009 au site Developpez.com, en tant que rédacteur, traducteur et responsable de la rubrique Qt.

Ilya Diallo

Ilya Diallo, ingénieur électronicien de formation, a découvert Qt à travers le projet KDE. En 2007, en tant que directeur technique chez un éditeur, il choisit Qt comme base pour un progiciel industriel.

Depuis, il utilise Qt professionnellement et s'implique dans la communauté Qt et dans le domaine du logiciel libre. Il conçoit aujourd'hui des applications de gestion et de supervision industrielle.

Vincent Meyer

Vincent Meyer développe pour l'entreprise Phonak, spécialisée dans les appareils auditifs. Formé en électronique et en physique, il connaît particulièrement le domaine de l'audio et du traitement du signal. Il utilise indifféremment les langages C++, C#, Java et Python et travaille actuellement sur la création d'interfaces utilisateurs et l'expérience utilisateur (UI/UX) à destination des plateformes mobiles (Android, Windows Phone).

Vincent s'est initié à Qt par le biais de Developpez.com, notamment par les "défis Qt", et utilise le framework pour des projets personnels ou à des fins de prototypage dans le cadre professionnel.

Florent Renault

Florent Renault développe des applications Qt depuis la version 3 dans des secteurs très variés, du projet lié au domaine militaire au logiciel de dessin en passant par la création d'outils de toutes sortes.

Passionné par les interactions homme-machine et l'ergonomie, il occupe actuellement un poste dans une entreprise de jeu de poker en ligne où il travaille de façon exclusive à l'amélioration l'interface utilisateur et aux process liés à l'utilisation de Qt au sein du projet. (Contact : renault.florent@gmail.com)

Louis du Verdier

Louis du Verdier, actuellement étudiant à l'école d'informatique Epitech, s'est formé à l'informatique en autodidacte. Très intéressé par les possibilités offertes par Qt, il en suit l'évolution depuis 2008 et le pratique dans le cadre personnel comme professionnel, ce qui lui a notamment valu d'être formé sur le langage QML dès sa première version. Très attaché à la communauté du framework, il a passé plusieurs années à répondre sur des forums et à publier des articles sur Developpez.com en tant que rédacteur et traducteur.

Jonathan Courtois

Jonathan Courtois est développeur freelance en C++/Qt. Diplômé de Polytech'Tours en 2009, il a travaillé pendant deux ans en qualité d'ingénieur logiciel à FXHome, où il a contribué au développement (en Qt) de l'éditeur vidéo Hitfilm avant de se mettre à son compte.

Jonathan a découvert Qt dans sa version 4.3 au cours d'un projet d'école pour la réalisation d'un jeu d'échecs sous Linux. Il est depuis pleinement impliqué dans la communauté Qt et a codirigé la rubrique Qt sur Developpez.com de juillet 2010 à septembre 2012. Il a ainsi été en contact avec les développeurs du Framework au sein des conférences Qt Dev Days (Munich) et Qt Contributors Summit (Berlin). Il possède les trois certifications Qt aujourd'hui existantes. (Contact : jonathan.courtois@gmail.com)

Préface

par Nicolas Arnaud-Cormos

Senior Software Engineer, KDAB

Qu'est-ce que Qt ? Il y a dix ans, j'aurais peut-être répondu rapidement sans vraiment réfléchir, en mettant en avant la simplicité d'utilisation, la documentation et le support multiplateforme. Ces qualités font et ont fait la renommée de Qt.

Mais en dix ans, le monde technologique a bien changé, les téléphones sont presque aussi puissants qu'un ordinateur, nombreux sont ceux ayant plusieurs terminaux connectés : ordinateurs, téléphones, tablettes, télévisions, montres, lunettes... avec des formes, des tailles et des interfaces différentes. Ce changement technologique s'est accompagné par une démocratisation du développement logiciel, permettant maintenant à l'amateur éclairé de créer et publier ses propres applications sur différents terminaux.

Cette évolution des terminaux et des usages s'accompagne également d'une véritable révolution de l'expérience utilisateur. Fini les applications avec menus et boutons classiques... l'utilisateur est maintenant habitué à des interfaces fluides et animées, presque "organiques". Les écrans tactiles ont maintenant permis l'utilisation de gestes, rendant leur utilisation plus naturelle. Il est par exemple devenu courant de zoomer sur une photo ou une page web en pinçant avec le pouce et l'index.

Dans ce nouveau contexte, Qt ne pouvait plus se satisfaire de ses acquis. Pour répondre à ces nouveaux besoins et usages, il a dû évoluer, innover et se reéinventer, que ce soit au niveau du code, des performances mais aussi structurellement. Tous ces changements ont conduit à la parution de la version 5.0 en décembre 2012, et ce n'est que le début.

Nobody knows what 'most' C++ programmers do –Bjarne Stroustrup

C'est une leçon importante venant de l'inventeur même du C++, et qui peut aussi s'appliquer à Qt : la bibliothèque Qt ne doit pas présumer de son utilisation. Plutôt que de restreindre le développeur ou l'équipe de développement (bien souvent accompagnée d'un ou plusieurs designers), il faut au contraire les libérer de toutes contraintes. C'est un des grands chantiers techniques de ces dernières années, chantier qui a débuté dès Qt 4.7 avec l'apparation de QML et Qt Quick, et continue encore de nos jours.

De nombreux autres changements ont été opérés sur le support OpenGL, le support C++11, les performances... pour moi, un des changements les plus important est structurel : le développement de la bibliothèque Qt est maintenant complètement ouvert. Développeurs et contributeurs utilisent tous les mêmes outils (il n'y a plus de différence entre contributions internes ou externes). Mais plus important encore : toutes les discussions et décisions sont maintenant publiques. Il est donc possible pour n'importe qui de participer et d'influencer librement le développement de la bilbliothèque Qt.

Qu'est-ce que Qt ? C'est une question difficile dont la réponse dépend grandement de celui ou celle qui la pose. Pour l'un ce sera la communauté qui primera, pour un autre le côté multiplateforme, un troisième trouvera son bonheur dans la simplicité d'utilisation et de déploiement... Ce qui est sûr, c'est que Qt évolue, s'améliore et est disponible sur de plus en plus de plateformes (Linux, Mac OS X, Windows, QNX, BlackBerry, Android, iOS...).

Quels que soient vos besoins, le présent livre va vous épauler dans votre découverte ou votre approfondissement de Qt. Les auteurs, plutôt que de vous proposer une lecture linéaire, vous incitent à venir piocher les chapitres qui vous intéressent, à creuser seulement certaines parties, selon votre bon vouloir.

Alors, apprenez, testez, survolez ou approfondissez, et surtout amusez-vous avec Qt, vous avez entre les mains l'ouvrage idéal pour vous accompagner !

Introduction

1. Qt, pourquoi faire ?

Qt est un ensemble d’outils d’aide à la création de logiciels.

L’objectif de Qt est de faciliter le travail des développeurs de différentes manières :

en étant multiplateforme : les applications créées avec Qt sont compatibles avec différents systèmes d’exploitation et le développeur peut se concentrer sur son applicatif plutôt que sur les détails spécifiques des plateformes visées ;

en étant natif : les applications ne subissent pas de pénalité en terme de performances et d’intégration à la plateforme (ergonomie, design, accès au système) ;

en étant complet : tous les ingrédients de base pour la réalisation d’applications sont intégrés, y compris des couches graphiques pour les interfaces utilisateurs.

En dehors de ces éléments quantitatifs, l’aspect qualitatif est également une composante très importante de Qt. Il s’agit du soin apporté aux API et à la documentation, et d’une réflexion permanente sur la "bonne façon" de faire les choses, en masquant autant que possible la complexité sous-jacente.

Le paysage applicatif est en évolution rapide depuis 2007, qui est l'année de la sortie du premier iPhone : les nouvelles plateformes mobiles (smartphones et tablettes) gagnent du terrain au détriment des plateformes bureautiques et des consoles de jeu ; un autre phénomène majeur est l’extension du domaine des applications web et des outils de développement associés. Sans être contradictoires, ces deux tendances ne sont pas convergentes : les besoins d’intégration au système, ainsi que les problèmes de continuité de la connexion internet rendent l’usage d’applications 100 % web difficile dans le contexte mobile.

Qt s’est adapté à ce paysage récent en proposant ses propres solutions aux nouveaux problèmes posés par les appareils mobiles et tactiles, non seulement en terme d’adaptation de l’interface utilisateur, mais aussi en terme d’adaptation aux cycles de développement de ces interfaces souvent beaucoup plus courts. Ces solutions sont basées essentiellement sur le module Qt Quick, qui sera présenté en détail dans le livre.

2. Objectifs du livre

Ce livre a pour ambition de vous présenter les outils de base de Qt 5, en mettant l'accent sur ses nouveautés. Le framework et ses usages étant très variés, il nous a semblé plus pertinent de les aborder de manière thématique plutôt que de se confiner dans une structure d'apprentissage progressive classique. Par ailleurs, nous souhaitions aussi bien intéresser le lecteur débutant en Qt que le développeur familier de Qt 4 désireux de se former à Qt 5. Il en résulte un ouvrage un peu particulier, organisé sous forme de modules plus ou moins autonomes – un peu à l'image du framework.

Les essentiels constituent une première série de modules, visant à introduire le framework dans son ensemble et les fonctionnalités Qt 5 les plus attendues. Par la force des choses, la partie traitant de Qt Quick et du QML est la plus importante : c'est là que résident les principales nouveautés de Qt 5 et un débutant devra nécessairement commencer par s'initier à leur emploi.

Si vous êtes un adepte de Qt Widgets, vous serez certainement un peu surpris du peu de place que nous lui avons accrodé. Non pas que nous jugeons ce module majeur de Qt comme secondaire, mais du fait de sa présence historique au sein du framework, il est déjà très documenté. Nous avons préféré nous concentrer sur des aspects moins connus.

Malgré ses 600 pages, le présent livre a fait l'objet de choix draconiens. Et nous avons le sentiment de n'avoir abordé qu'une petite partie de Qt. C'est pourquoi, nous prévoyons de publier à l'avenir d'autres modules spécialisés, qui viendront compléter cette première base.

3. Contenu du livre

Attention > Ce livre n'est pas construit de manière linéaire. Si vous débutez, vous serez sans doute tenté de lire les chapitres dans l'ordre, or ce n'est pas forcément la meilleure façon ! Vous pourriez être un peu perdu. Commencez par les chapitres les plus débutants en vous aidant de la carte graphique de l'ouvrage et des parcours proposés à la Section 4, Par où commencer ?.

Vous trouverez dans Les essentiels les modules suivants :

Tour d'horizon, qui introduit les nouveautés de Qt 5 au regard des versions antérieures, présente la philosophie de son développement et ses perspectives ;

Migration de Qt 4 à Qt 5, qui comme son nom l'indique vous aidera à migrer. Ces deux premiers chapitres, de par leur nature, s'adressent plutôt aux développeurs déjà familiers de Qt ;

Installation de Qt et introduction à Qt Creator , qui fournit aux plus débutants d'entre vous des informations relatives à l'installation du SDK et un premier aperçu de Qt Creator, l'environnement de développement de référence. Vous y trouverez également des informations avancées pour des installations de Qt personnalisées ;

Premiers programmes (avec Qt Widgets) , qui passe en revue un ensemble de concepts importants de Qt 5 au travers de l'analyse de trois exemples. L'interface graphique de ces applications utilise le module Qt Widgets, ce qui peut constituer une introduction à ce module. Si vous avez déjà pratiqué Qt 4, vous y trouverez une illustration de fonctions nouvelles, ainsi qu'une petite introduction à Enginio, un service web disposant de fonctions d'intégration aux applications Qt ;

Aller plus loin avec Qt Creator, qui présente différentes fonctions de Qt Creator fort utiles pour travailler efficacement et prendre en main l'environnement de développement dédié à Qt ;

Qt Quick, qui vous initie en onze chapitres à l'utilisation de Qt Quick, le nouveau module de Qt permettant de développer facilement des interfaces graphiques en QML. Il se décompose en plusieurs chapitres allant du moins technique (à destination des graphistes et développeurs débutants) au plus technique (pour les développeurs C++).

Graphics View, qui vous initie en trois chapitres (Les bases, notions avancées et exemple d'application) à l'emploi du framework QGraphicsView.

À ces modules s'ajoutent deux petits compléments : Choix de l'interface graphique qui vous aidera à choisir le module Qt dont vous avez besoin pour développer votre interface et Déploiement d'applications qui fournit quelques informations essentielles sur le déploiement d'une application avec Qt 5.

4. Par où commencer ?

Fondamentalement aucun ordre de lecture n'est imposé, vous pouvez lire les chapitres dans l'ordre que vous voulez, selon vos besoins et votre intérêt. Toutefois certains chapitres supposent que vous ayiez acquis certaines connaissances de base, et d'autres s'adressent plus spécifiquement aux débutants. D'une manière générale, assurez-vous à l'aide de la carte graphique que le niveau du module qui vous intéresse corresponde bien à votre niveau.

Parcours Débutants infographistes

Commencez par le chapitre Installation de Qt et introduction à Qt Creator   en n'y lisant que la section portant sur l'installation de Qt par l'installateur et l'introduction à Qt Creator. Une fois Qt installé sur votre ordinateur, allez directement à la Partie Qt Quick , et commencez par la première partie du chapitre Créer des interfaces avec Qt Quick Designer  . Appropriez-vous le mode Designer en créant vos propres exemples, et seulement après, si vous en sentez le besoin, essayez de comprendre ce qui se cache derrière vos objets : lisez l'introduction de la partie, puis le chapitre Démarrer en QML. Progressez ensuite dans l'ordre des chapitres aussi loin que vous suivez.

Parcours Débutants développeurs

Commencez par le chapitre Installation de Qt et introduction à Qt Creator , sans entrer dans les détails de la compilation, puis allez directement à la Partie Qt Quick , lisez l'introduction puis passez directement à Démarrer en QML. Progressez ensuite dans l'ordre des chapitres ou attaquez directement par le chapitre Étude d'une première application avec Qt Quick en vous référant aux chapitres plus théoriques au fur et à mesure de sa lecture pour approfondir votre connaissance des outils utilisés. Une fois les notions de base acquises, la découverte du Designer pourra vous faire gagner du temps. Après Qt Quick, étendez votre connaissance de Qt avec les autres modules.

Parcours Développeurs débutant en Qt

Vous développez déjà en C++ et souhaitez prendre en main Qt, commencez par Choix de l'interface graphique et Premiers programmes (avec Qt Widgets) , puis laissez-vous guider par votre curiosité et vos besoins. N'oubliez pas le chapitre Aller plus loin avec Qt Creator, qui vous aidera à configurer votre environnement de développement selon vos habitudes.

Parcours Développeurs familiers de Qt 4

Commencez par le Tour d'horizon afin de repérer les nouveaux éléments de Qt 5 qui vous intéressent. Si vous devez faire migrer vos applications, poursuivez avec Migration de Qt 4 à Qt 5. Puis poursuivez votre lecture selon vos centres d'intérêts. N'oubliez pas le chapitre Aller plus loin avec Qt Creator, qui vous aidera à configurer votre environnement de développement selon vos habitudes. Ni le chapitre Créer des interfaces avec Qt Quick Designer   qui apportera des pistes pour améliorer la collaboration entre designers et développeurs.

5. Prérequis

Le module Qt Quick ayant été conçu pour permettre à des non-développeurs de créer des interfaces en Qt, les premiers chapitres ayant trait à son emploi n'exigent aucun prérequis. C'est dans cette perspective qu'un chapitre spécifique introduisant JavaScript pour Qt Quick vous est proposé. Les autres parties du livre supposent que le lecteur possède des compétences de base en programmation C++ et en programmation orientée objet. Aucune connaissance préalable du framework Qt n'est nécessaire, cependant l'ouvrage est consacré à Qt 5 et ne couvre que partiellement les fondations de Qt 4.

Pour utiliser les exemples de ce livre, il vous faudra créer un environnement de développement en téléchargeant le framework Qt 5.x (de préférence Qt 5.1 ou plus), un environnement de développement intégré (EDI) et un compilateur C++. Le développement Qt est supporté sous Windows, Mac OS et Linux avec les composants cités ci-dessus. L'installateur Qt fournit Qt Creator pour chacune de ces plateformes comme EDI de base, la Section 2, Introduction à Qt Creator vous présente comment bien débuter avec cette application et le chapitre Aller plus loin avec Qt Creator vous permet d'aller plus loin. Il est également possible d'utiliser d'autres EDI comme Visual Studio sous Windows ou Xcode sous Mac OS.

Il vous faudra également un compilateur C++ pour compiler les exemples du livre et les applications que vous allez créer. Visual Studio Express 2010 et 2012 sont disponibles gratuitement pour Windows ou vous pouvez télécharger MinGW pour utiliser le compilateur GCC sur cette même plateforme. Les packages Linux et Mac OS proposent généralement une version récente de GCC. Depuis la version Qt 5.0.1, un installateur du framework pour Windows inclut les binaires de MinGW dans sa version 32 bits qui contient GCC 4.7.2. Qt 5.1 est depuis livré avec MinGW 4.8.

Si vous désirez faire du développement mobile, vous n'avez pas besoin d'un téléphone pour développer des applications Qt Quick. Des simulateurs pour les systèmes Maemo et MeeGo sont disponibles avec Qt Simulator inclus dans Qt Creator. Le support de Android et iOS sont également disponibles en Technology Preview dans Qt 5.1. Il est cependant possible de brancher votre téléphone possédant un de ces systèmes d'exploitation avec un câble USB et de tester vos applications créées avec Qt Creator directement sur votre téléphone. Pour le développement mobile, des outils supplémentaires, comme un SDK spécifique à la plateforme, peuvent être nécessaires. Reportez-vous au chapitre Installation de Qt et introduction à Qt Creator  pour plus d'informations.

6. Codes sources des exemples

Vous trouverez sur la page du site des éditions D-BookeR consacrée au livre, onglet Compléments, une archive réunissant l'ensemble des codes sources des exemples du livre. Ceux-ci sont classés par projet et chapitre.

Toutefois pour vous simplifier l'accès à ces codes au fur et à mesure de votre lecture, nous les avons aussi hébergés sur Github dans un dossier dédié. Chaque fois que vous rencontrerez l'icône  , un simple clic dessus vous renverra vers le dossier contenant le code complet de l'exemple.

7. Accès aux vidéos

La version numérique du livre contient quelques illustrations sous forme de vidéos .

Si vous lisez ce livre en ligne, elles sont intégrées à votre page, et votre navigateur ira chercher de lui-même le format de vidéo qu'il supporte.

Si vous lisez une version téléchargée, un clic sur l'image vous redigera vers la vidéo en ligne au format MP4. Si votre navigateur par défaut ne supporte pas nativement le MP4, modifiez à la main l'extension du fichier dans l'url en remplaçant .mp4 par .webm.

Note > Avant de cliquer, assurez-vous que le pointeur de votre souris s'est changé en main.

Choix de l'interface graphique

Qt propose une panoplie d'outils de création d'interfaces graphiques. Cette panoplie peut être intimidante au premier abord, d'autant que certains composants sont combinables ou interdépendants, voire paraissent parfois concurrents. Dans les grandes lignes, une application graphique Qt peut être basée sur Qt Widgets, Graphics View ou Qt Quick. Le principal critère de choix entre ces différents composants est le type d'application visé.

Encore faut-il que votre application ait réellement besoin d'une interface graphique : c'est la première question à vous poser. Une application de type service ou démon peut ne pas avoir d'interface utilisateur du tout, ou être pilotée à distance par une interface de communication interprocessus. L'interface peut aussi être textuelle, par exemple pour un usage en ligne de commande. Dans ces cas, l'application Qt sera généralement basée sur QCoreApplication.

Avant d'aller plus loin, interrogez-vous également sur la nature de l'interface utilisateur à réaliser. S'il est impératif – ou souhaitable – de créer une interface purement web (c'est-à-dire fonctionnant dans un navigateur), alors sachez que les composants graphiques de Qt ne le permettent pas[1]. Par contre, vous pourrez réaliser des applications dites "hybrides" en intégrant un composant WebView dans une interface Qt Quick ou Qt Widgets. Ce composant, basé sur WebKit, permet de réutiliser du code HTML5 ou d'intégrer des pages web en ligne dans une application native. Dans le même esprit, bien qu'il ne s'agisse pas d'un composant graphique, il faut noter aussi que le moteur JavaScript de Qt permet de combiner JavaScript avec QML et C++ dans toutes les parties de l'application.

Toutes les interfaces graphiques de Qt ont accès à des surfaces de dessin OpenGL, et donc peuvent bénéficier d'une accélération matérielle 2D ou 3D (Qt Quick 2 est même exclusivement basé sur OpenGL). Pour des effets graphiques personnalisés, il est possible d'écrire directement du code GLSL (shaders), et le module Qt 3D fournit une API de plus haut niveau spécifiquement pour les interfaces 3D.

Dans le cas d'applications de type bureautique, Qt Widgets convient pour des interfaces basées sur des composants standards de la plateforme (listes, arbres, boutons, champs d'édition, etc.). À partir de Qt 5.1, le module Qt Quick Controls peut être envisagé en remplacement de Qt Widgets dans les cas les plus courants.

Graphics View permet une utilisation libre d'une surface d'affichage 2D tout en intégrant de nombreux services de gestion des objets de l'interface (création, sélection, déplacement, transformation, zoom, etc.). La vue graphique peut gérer sans ralentissement de très nombreux éléments (couramment plusieurs dizaines de milliers d'éléments affichés simultanément). Elle peut également intégrer les widgets du module Qt Widgets. Cette API est donc bien adaptée à la création d'application de type CAO, d'affichage de graphes interactifs ou de contrôle/commande industriel ou domotique, par exemple.

Qt Quick est particulièrement recommandé pour des applications mobiles, auxquelles il apporte sa facilité de création d'interfaces tactiles animées et personnalisées. Chaque plateforme ajoute ses composants spécifiques, le tout formant un SDK permettant une parfaite intégration de l'application dans l'environnement. Au moment de la sortie de Qt 5.0, les principaux SDK mobiles sont encore basés sur Qt 4, mais doivent migrer à court terme vers Qt 5. Il s'agit du SDK Cascades de Blackberry OS 10, du SDK de JollaMobile et de Plasma Active.

Qt Quick est également bien adapté au domaine de l'embarqué (véhicules, appareils industriels et médicaux, etc), domaine dans lequel, comme pour les applications mobiles, les interfaces tactiles et personnalisées sont prépondérantes.

Le schéma ci-dessous résume ces différentes options.

(2) Qt Quick 1 permet d'intégrer une vue Qt Quick dans un QWidget, l'équivalent existe pour Qt Quick 2 à partir de Qt 5.1 avec la fonction QWidget::createWindowContainer().

[1] Plusieurs projets expérimentaux ont tenté de relever le défi en utilisant des méthodes exotiques, voir par exemple l'article (en anglais) publié sur Brain Dumping Ground.

1

Tour d'horizon

Qt 5 est la première version majeure de Qt depuis la sortie de Qt 4.0 en 2005.

Comme toute version majeure, elle apporte son lot de nouveautés, dont nous allons décrire les grandes lignes dans ce chapitre.

Certains changements font qu'une application Qt 4 demandera des modifications pour passer à Qt 5. Cependant, contrairement à la transition de Qt 3 vers Qt 4, les incompatibilités des sources sont mineures, en grande partie automatisables, et donc la transition devrait pouvoir se faire avec un minimum d'efforts (voir Migration de Qt 4 à Qt 5).

Qt était à l'origine un framework essentiellement destiné à la création d'applications graphiques. Même s'il est devenu un framework généraliste dont la couverture s'est étendue au fil des versions, l'interface utilisateur reste un domaine central de Qt.

Pour Qt 5, la technologie mise en avant pour la réalisation d'interfaces est Qt Quick. Cette technologie a été introduite avec Qt 4.7 et a pour ambition de supplanter à terme les classes de widgets existantes. La version de Qt Quick livrée avec Qt 5.0 n'est pas suffisamment complète et mature pour remplacer les interfaces basées sur les widgets pour toutes les applications, mais la stratégie clairement exprimée par l'équipe Qt est d'aller dans cette voie (voir plus loin l'encadré La stratégie Qt Quick). La version Qt 5.1 comportant les Qt Quick Controls est un pas de plus dans cette direction. Bien sûr, une application basée sur les widgets n'a pas besoin d'être réécrite en Qt Quick pour fonctionner avec Qt 5.0 et le projet Qt s'est explicitement engagé à maintenir le module Qt Widgets pendant tout le cycle de vie de Qt 5.x, soit au minimum 4 à 5 ans.

En dehors du contenu technique, Qt 5 marque aussi un tournant dans la vie du projet Qt avec le passage à un modèle de gestion complètement ouvert (voir l'encadré L'Open Governance).

Filet vertical  : L'Open Governance

Jusqu'en 2011, le code source était public et accessible à tous, cependant les décisions concernant Qt et l'essentiel des évolutions du code venaient de l'entreprise propriétaire (Trolltech puis Nokia). Les contributions étaient possibles mais difficiles. Un nouveau mode de fonctionnement, l'Open Governance, a été institué fin 2011. L'Open Governance donne à Qt une organisation transparente et ouverte inspirée des grands projets open-source tels que le noyau Linux et KDE. Transparente : les discussions et prises de décision sont publiques et peuvent être suivies par tous les utilisateurs et contributeurs. Les outils de gestion du projet (accès au code, revue de code, etc.) sont les mêmes pour tous. Ouverte : la participation est accessible à tous suivant un principe méritocratique, c'est-à-dire que la hiérarchie est basée sur le niveau d'implication et la qualité du travail au sein du projet. Pour une description détaillée de l'organisation de l'Open Governance, voir la page sur le site du projet Qt qui lui est consacrée.

1. Les nouveautés de Qt 5

1.1. Organisation générale

La structure de Qt a été changée en profondeur. Les objectifs principaux de cette nouvelle structure sont la modularité et la portabilité, à travers les éléments de base de la structure de Qt 5 : les modules.

Du point de vue du développeur d'applications, un module est une bibliothèque dont l'application dépend ou non. Du point de vue du projet Qt et de ses contributeurs, un module est une unité de projet avec son responsable (le mainteneur) et son propre numéro de version. Les modules de Qt se répartissent en trois catégories : Qt Essentials, Qt Add-ons et Qt Tools. Les listes ci-dessous font référence à la version Qt 5.1.

Qt Essentials contient les modules d'intérêt général devant fonctionner sur toutes les plateformes officielles de Qt.

Tableau 1.1 : Listes des modules de Qt Essentials

Qt Core
Contient les fonctionnalités de base, hors interface utilisateur. Tous les autres modules de Qt dépendent de ce module.

Qt Gui

Ajoute les fonctionnalités d'interface utilisateur à Qt Core. Inclut OpenGL depuis Qt 5.

Contrairement à Qt 4, les widgets ne sont pas inclus dans Qt Gui, ils ont leur propre module Qt Widgets.

Qt Multimedia
Fournit des fonctionnalités audio, vidéo, photo et radio. Requiert GStreamer sous Linux.

Qt Multimedia Widgets
Widgets spécifiques pour le multimédia.

Qt Network
Classes pour la programmation réseau.

Qt Qml
Module QML et Javascript.

Qt Quick
Framework déclaratif pour la construction d'interfaces utilisateurs dynamiques.

Qt Quick Controls
Contrôles réutilisables réalisés en Qt Quick permettant de créer des interfaces utilisateurs de style bureautique.

Qt Quick Layouts
Gestionnaire de contenu pour les éléments Qt Quick 2 au sein des interfaces utilisateurs.

Qt Sql
Gestion des bases de données SQL.

Qt Test
Classes pour créer/écrire des tests unitaires pour les applications et bibliothèques réalisées avec Qt.

Qt WebKit
Nouvelle implémentation basée sur WebKit2 et nouvelle API QML.

Qt WebKit Widgets
L'API de Qt 4 basée sur QWidget et WebKit1.

Qt Widgets
Widgets C++ basés sur Qt Gui. Correspond aux widgets de Qt 4 qui étaient présents auparavant dans Qt Gui.

Qt Add-ons contient les modules additionnels, mono ou multiplateformes, répondant à des besoins spécifiques.

Tableau 1.2 : Liste des modules de Qt Add-ons

Active Qt | Framework pour l'usage de contrôles ActiveX et d'objets COM.
Qt Concurrent | API de haut niveau pour la programmation concurrente, avec une implémentation interne multithread visant de bonnes performances sur un système multiprocesseur.
Qt D-Bus | Bibliothèque UNIX pour la communication interprocessus avec le protocole D-Bus.
Qt Declarative | Classes de Qt Quick 1, pour compatibilité avec Qt 4. Utiliser le module Qt Quick pour du nouveau code.
Qt Graphical Effects | Effets graphiques pour Qt Quick 2.
Qt Image Formats | Plug-ins pour des formats d'images supplémentaires (TIFF, MNG, TGA, WBMP).
Qt OpenGL | Classes simplifiant l'usage d'OpenGL dans les applications Qt. Fournies pour faciliter le portage depuis Qt 4, utiliser les classes QOpenGL du module Qt Gui pour du nouveau code.
Qt Print Support | Classes simplifiant l'impression et la rendant portable.
Qt Script | Classes pour rendre les applications scriptables, pour compatibilité avec Qt 4. Utiliser les classes QJS* du module Qt Qml pour du nouveau code.
Qt Script Tools | Composants supplémentaires pour les applications utilisant Qt Script.
Qt Sensors | Accès aux capteurs par une interface C++ et QML. Exemples : détection de mouvements, compas, luminosité, proximité, etc. Disponible pour les plateformes Android, BlackBerry, iOS et Mer.
Qt Serial Port | Fournit un accès aux ports séries virtuels et ceux du système.
Qt Svg | Classes pour l'affichage et la création de fichiers SVG.
Qt X11 Extras | Met à disposition une API spécifique pour X11.
Qt Xml | Implémentation C++ de DOM et SAX. Module obsolète, utiliser QXmlStreamReader/Writer pour du nouveau code.
Qt Xml Patterns | Pour la validation de XPath, XQuery, XSLT et XML Schema.

Qt Tools contient les outils officiels de Qt, fonctionnant sur toutes les plateformes de développement supportées.

Tableau 1.3 : Liste des Qt Tools

Qt Designer | Classes étendant Qt Designer (Qt Designer est une application pour la construction d'interfaces graphiques basées sur des composants Qt Widgets).
Qt UI Tools | Outils pour la gestion (à l'exécution) des interfaces définies dans les fichiers UI créés par Qt Designer.
Qt Help | Classes pour la gestion de l'aide en ligne.

1.2. QPA

QPA (Qt Platform Abstraction) est la couche d'abstraction des plateformes de Qt 5. Elle est issue du projet expérimental Lighthouse initié pour Qt 4. Par rapport à QWS, qui avait un rôle similaire dans l'architecture de Qt for Embedded Linux de Qt 4, elle permet un portage nettement plus simple de Qt sur de nouvelles plateformes (c'est l'existence de QPA qui a lancé les portages Android, iOS et BlackBerry 10). Elle offre également un accès complet à OpenGL.

Note >Contraitement à QWS, QPA n'est pas seulement un moyen de porter Qt sur des plateformes supplémentaires : la gestion de toutes les plateformes de Qt 5, y compris Linux, Windows et Mac OS, repose sur des plug-ins QPA.

1.3. Qt Quick 2

La version 2 de Qt Quick étend la version 1. Elle introduit un graphe de scène (Qt Scene Graph), présenté plus en détails dans la section suivante. Qt Scene Graph autorise l'affichage d'effets avancés avec des performances nettement supérieures à celles des implémentations précédentes, principalement grâce à la possibilité de tirer parti de l'accélération matérielle par la carte graphique (GPU).

Cette version apporte aussi de nouveaux modules (notamment un système de particules, des effets graphiques, la programmation directe du GPU en GLSL), et de nouveaux éléments (par exemple, MultiPointTouchArea qui apporte la gestion tactile multipoints à QML).

À signaler également, la présence d'un élément Canvas possédant quasiment la même API que l'élément correspondant en HTML5 (et permettant donc de réutiliser du code entre les deux environnements). De même, l'API de stockage des données LocalStorage est conforme à l'API synchrone d'HTML5 Web Database.

Par rapport à Qt Quick 1, les performances sont également améliorées par l'utilisation d'un moteur Javascript dédié en remplacement du moteur Javascript de WebKit.

L'ambition de Qt Quick étant à terme d'être utilisé pour la création d'interfaces graphiques de tout type, il doit proposer des services équivalents à ceux du module Qt Widgets. Cette tâche incombe au module Qt Quick Controls, qui fournit des composants QML de type widget adaptés aux différentes plateformes. Les premiers projets de composants ont été créés pour les plateformes mobiles de Nokia à partir de Qt 4.7. Le projet Qt Quick Controls (contenant les composants pour les plateformes de bureau, initialement appelé Qt Desktop Components) a été ajouté dans les modules Qt Essentials à partir de Qt 5.1.

Filet vertical  : La stratégie Qt Quick

L'origine de Qt Quick remonte à 2007 et au projet Qt Kinetic initié par une équipe de Trolltech. L'objectif de Qt Kinetic était de répondre à la demande d'outils pour la création d'interfaces utilisateurs animées, qui n'étaient pas réalisables avec Qt à l'époque. L'interface était définie dans un format XML et ce format précurseur de QML pouvait exprimer les états et les transitions animées en plus des éléments graphiques eux-mêmes. Cette description déclarative de l'interface avait aussi l'avantage, par rapport à une implémentation C++, de masquer la complexité des détails des mécanismes d'animation. Ce format est ensuite devenu QML et la partie "Declarative UI" de Kinetic a été intégrée dans ce qui est devenu Qt Quick.

L'autre composante importante de Qt Quick est Qt Scene Graph, issu lui-même d'un projet expérimental lancé indépendamment, et ayant pour objet l'amélioration des performances d'affichage et l'accès à des effets avancés dans un environnement OpenGL avec accélération matérielle. La dépendance de Scene Graph à OpenGL est assez profonde, ce qui permet d'exploiter au mieux OpenGL mais qui a l'inconvénient de rendre un portage éventuel sur une autre technologie difficile. À partir de Qt 5, il faut qu'OpenGL (ES) 2 soit présent (ou émulé) sur les plateformes visées par Qt.

En dehors des aspects visibles de l'interface, Qt Quick propose un modèle de programmation déclarative radicalement différent du modèle Qt/C++ classique. Cette cohabitation n'est pas seulement un défi technique, il s'agit aussi, dans certains cas, de convaincre des vétérans du langage C++ d'adopter un style de programmation et un langage (JavaScript) ayant parfois pour eux mauvaise réputation – il est à noter à ce propos que certaines parties de Qt Quick (Qt 3D par exemple) possèdent une double API QML/C++, et que la question de l'extension de ces API C++ fait l'objet de débats récurrents. De plus, du fait de sa jeunesse, les bonnes pratiques de programmation pour Qt Quick sont encore largement à découvrir et à formaliser, surtout sur de gros projets. En contrepartie de cet investissement dans un style de programmation différent, Qt Quick promet des gains de productivité très importants en abaissant la barrière entre la vision idéale d'une interface utilisateur (celle du designer souvent) et sa réalisation.

Un autre avantage important de Qt Quick est de contribuer à alléger le coût de développement d'une application native multiplateforme (bureau et mobile). Il est devenu apparent au fil du temps, chez Trolltech puis Nokia, que la transposition des interfaces à base de widgets sur les plateformes mobiles n'était pas une solution satisfaisante. Qt Quick est plus adapté à ce besoin de création d'interfaces personnalisées pour chaque type de support. Ces interfaces, bien découplées du reste du code, deviennent des éléments "jetables", faciles à remplacer. Dans le monde mouvant des plateformes mobiles, cet avantage est potentiellement décisif.

1.4. Qt Scene Graph

Qt Scene Graph, le graphe de scène de Qt 5, est basé sur OpenGL. Il tire parti de la nature déclarative de QML pour réaliser des optimisations de rendu graphique inaccessibles à des algorithmes impératifs tels que ceux utilisés pour du dessin direct avec QPainter. Le contenu de la scène QML étant connu à l'avance, il est possible d'ordonner les opérations de façon à miminiser les calculs inutiles (pixels cachés) et les changements d'état du contexte OpenGL.

La Figure 1.1  représente les différentes couches graphiques de Qt 5, incluant Qt Scene Graph. Les blocs colorés de la partie supérieure du diagramme correspondent aux différents types d'interfaces graphiques à disposition des développeurs d'applications ; les blocs inférieurs sont les composants internes auxquels ces interfaces font appel.

Figure 1.1 : Couches graphiques de Qt 5

1.5. WebKit2

WebKit est un moteur open-source de rendu HTML et Javascript dérivé (par Apple) des projets KHTML et KJS de KDE. Dans l'architecture d'origine de WebKit, le rendu web est fait dans le même processus que le reste de l'application. Une nouvelle architecture multiprocessus a été développée à partir de 2010 afin d'isoler le rendu web pour une meilleure sécurité...