Les dé­ve­lop­peurs d’ap­pli­ca­tions le savent bien : la création et la struc­tu­ra­tion des dif­fé­rents com­po­sants sont complexes. Avec leurs com­po­sants prêts à l’emploi, les bi­blio­thèques et les in­fras­truc­tures de dé­ve­lop­pe­ment jouent par con­sé­quent un rôle essentiel. Celles-ci con­tri­buent non seulement à uni­for­mi­ser le processus de dé­ve­lop­pe­ment mais aussi à le sim­pli­fier. L’in­fras­truc­ture de dé­ve­lop­pe­ment mul­ti­pla­te­formes Qt vous épargne par exemple quantité de travail lors du dé­ve­lop­pe­ment d’in­ter­faces gra­phiques uti­li­sa­teur et de pro­grammes entiers. Dans ce cadre, l’accent est mis en par­ti­cu­lier sur une col­la­bo­ra­tion sans accroc entre les designers et les dé­ve­lop­peurs. Cette col­la­bo­ra­tion est assurée par des com­po­sants tels que l’en­vi­ron­ne­ment de dé­ve­lop­pe­ment intégré Qt Creator, un langage de balisage propre mais aussi dif­fé­rents modules librement sé­lec­tion­nables.

Qt : qu’est-ce que c’est ?

Mé­con­tents des outils dis­po­nibles pour le dé­ve­lop­pe­ment de logiciels mul­ti­pla­te­formes, les Nor­vé­giens Haavard Nord et Eirik Chambe-Eng s’at­te­lè­rent en 1990 au dé­ve­lop­pe­ment de Qt. Deux ans plus tard, ils fondaient l’en­tre­prise Trolltech depuis rachetée par le groupe de té­lé­com­mu­ni­ca­tion Nokia puis, en 2012, par la société de logiciels finnoise Digia. Depuis 2014, le dé­ve­lop­pe­ment est confié à la filiale de Digia, The Qt Company.

Au fil du temps, Qt s’est développé pour passer d’une simple bi­blio­thèque de classes à un Framework complet, et de nombreux chan­ge­ments ont été apportés au modèle de licence. Le système de double licence actuel, qui laisse à l’uti­li­sa­teur le choix entre une licence pro­prié­taire et des licences open source GPL et LGPL, permet une uti­li­sa­tion libre ou com­mer­ciale.

Qt est programmé en C++, le langage de pro­gram­ma­tion étant complété avec le pré­pro­ces­seur MOC (Meta-Object Compiler) qui apporte des fonc­tion­na­li­tés telles que le mécanisme élé­men­taire signaux/slots (per­met­tant la com­mu­ni­ca­tion dé­clen­chée par un événement entre les objets du programme). Pour ce faire, le pré­pro­ces­seur génère avant même la com­pi­la­tion un C++ conforme aux normes à partir du code source Qt. Par con­sé­quent, les ap­pli­ca­tions Qt peuvent être traduites avec des com­pi­la­teurs C++ courants tels que GCC, ICC, MinGW ou MSVC. Les versions les plus récentes d’in­fras­truc­tures offrent d’autre part un accès au langage de balisage QML propre à Qt qui apporte des sim­pli­fi­ca­tions en par­ti­cu­lier dans le cadre du dé­ve­lop­pe­ment d’IGU. En dehors de ces solutions de langage internes, il prend en charge d’autres langages de pro­gram­ma­tion mis à dis­po­si­tions par des pres­ta­taires tiers tels que Python, Ruby, Go, Java ou PHP.

Avec qmake (solution standard) et Qbs (Qt Build Suite), l’in­fras­truc­ture offre deux systèmes de cons­truc­tion, sachant que d’autres systèmes tels que CMake peuvent également être utilisés. Par ailleurs, les uti­li­sa­teurs ont à dis­po­si­tion l’en­vi­ron­ne­ment de dé­ve­lop­pe­ment intégré Qt Creator qui dispose notamment d’un éditeur de code et permet un accès rapide aux com­po­sants sé­lec­tion­nés.

Aperçu des prin­ci­paux com­po­sants Qt

Avec le temps, l’in­fras­truc­ture de dé­ve­lop­pe­ment Qt est devenue toujours plus complète. Un travail intensif a été effectué sur la qualité de l’en­vi­ron­ne­ment de dé­ve­lop­pe­ment intégré Qt Creator ainsi que sur la prise en charge de langages et de pla­te­formes mais également sur la mise à dis­po­si­tion d’une large palette de fonc­tion­na­li­tés aussi vaste que possible pour les pro­gram­meurs et designers. Ce faisant, l’équipe Qt met depuis toujours l’accent sur le fait de couvrir également des scénarios d’ap­pli­ca­tion spé­ci­fiques dans le segment in­for­ma­tique de bureau et le segment mobile.

Étant donné qu’uni­que­ment un petit nombre d’ap­pli­ca­tions fonc­tion­nant sur la base de Qt dépendent de l’étendue complète des fonc­tion­na­li­tés, l’in­fras­truc­ture est divisée en modules depuis la version 4. Ces modules peuvent être sé­lec­tion­nés et assemblés librement ce qui offre une grande flexi­bi­lité dans le cadre du dé­ve­lop­pe­ment, aussi bien à l’équipe Qt qu’aux uti­li­sa­teurs. Avec la version 5, l’équipe Qt a introduit une dis­tinc­tion sup­plé­men­taire dans les modules entre les modules de base (Es­sen­tiels Qt) d’un côté et les modules com­plé­men­taires pour des fins spé­ci­fiques (Ex­ten­sions Qt) de l’autre.

Es­sen­tiels Qt

Les Es­sen­tiels Qt cons­ti­tuent la base de Qt, quelle que soit la pla­te­forme. Ils sont dis­po­nibles sur toutes les pla­te­formes de dé­ve­lop­pe­ment sup­por­tées ainsi que sur toutes les pla­te­formes cibles testées et sont per­ti­nents et utiles pour une grande partie des ap­pli­ca­tions dé­ve­lop­pées. Les modules suivants font partie des com­po­sants es­sen­tiels de l’in­fras­truc­ture :

Modules Des­crip­tion
Qt Core Classes clés non gra­phiques utilisées par tous les autres modules
Qt GUI Classes de base pour la con­cep­tion d’in­ter­faces gra­phiques uti­li­sa­teur ; comprend OpenGL
Qt Mul­ti­me­dia Ensemble de types QML et de classes C++ pour le trai­te­ment de contenus mul­ti­mé­dias (audio/vidéo) ; IPA pour l’accès aux fonc­tion­na­li­tés de caméra et de radio
Qt Mul­ti­me­dia Widgets Classes basées sur les widgets pour l’im­plé­men­ta­tion de fonc­tion­na­li­tés mul­ti­mé­dias
Qt Network IPA pour les ap­pli­ca­tions accédant à des réseaux TCP/IP
Qt QML In­fras­truc­ture et types de langage de balisage Qt QML
Qt Quick In­fras­truc­ture dé­cla­ra­tive pour le dé­ve­lop­pe­ment d’ap­pli­ca­tions hautement dy­na­miques avec des in­ter­faces uti­li­sa­teur QML taillées sur mesure
Qt Quick Controls 2 Extension Qt Quick : types QML légers, très efficaces sim­pli­fiant la création d’in­ter­faces
Qt Quick Dialogs Extension Qt Quick : types pour la création et l’in­te­rac­tion avec les dialogues système
Qt Quick Layouts Extension Qt Quick : types QML pour l’agen­ce­ment d’objets dans l’interface dé­ve­lop­pée
Qt Quick Test In­fras­truc­ture test pour les ap­pli­ca­tions QML ; les cas de test sont décrits comme fonc­tion­na­li­tés Ja­vaS­cript
Qt SQL Classes pour l’in­té­gra­tion de banques de données SQL
Qt Test Classes pour les tests détaillés des ap­pli­ca­tions et les bi­blio­thèques Qt
Qt Widgets Ensemble d’éléments d’IU per­met­tant de créer des in­ter­faces uti­li­sa­teur clas­siques basées sur des widgets avec le Qt Designer

Comme indiqué, les modules utilisés dépendent de l’ap­pli­ca­tion. Les facteurs décisifs à cet égard sont tout d’abord les exigences aux­quelles le projet concerné doit sa­tis­faire. Dans certains cas, les outils avec lesquels vous souhaitez tra­vail­ler sont également dé­ter­mi­nants : les modules Qt Core et Qt GUI sont intégrés par défaut lorsque vous souhaitez tra­vail­ler avec qmake. Si vous optez pour Qbs ou une autre solution en tant que système de cons­truc­tion, une telle dé­pen­dance pré­dé­fi­nie n’existe pas.

Lors de la con­cep­tion d’in­ter­faces uti­li­sa­teur gra­phiques, Qt offre également deux pos­si­bi­li­tés dif­fé­rentes impactant le choix des modules clés : d’une part, avec le Qt Designer, un éditeur WYSIWYG qui est étroi­te­ment lié aux widgets Qt est dis­po­nible. D’autre part, Qt Quick offre une al­ter­na­tive (com­pre­nant dif­fé­rents modules com­plé­men­taires) per­met­tant le dé­ve­lop­pe­ment du langage QML.

Ex­ten­sions Qt

Tous les modules apportant une valeur ajoutée aux uti­li­sa­teurs de Qt à des fins spé­ci­fiques sont marqués du label « ex­ten­sions Qt ». Alors que certains de ces modules com­plé­men­taires sont, à l’instar des modules clés, conçus pour toutes les pla­te­formes de dé­ve­lop­pe­ment et toutes les pla­te­formes cibles sup­por­tées, une grande partie de ces com­po­sants est uni­que­ment uti­li­sable sur certaines pla­te­formes. À titre d’exemple, l’extension Qt Bluetooth, qui permet l’accès au matériel Bluetooth, fonc­tionne uni­que­ment dans des ap­pli­ca­tions Android, iOS, Linux et macOS ; les modules tels que Qt Windows Extras, Qt Mac Extras ou Qt Android Extras fonc­tion­nent uni­que­ment dans les pro­grammes pour les pla­te­formes cibles cor­res­pon­dantes.

Par ailleurs, il existe trois ex­ten­sions uni­que­ment dis­po­nibles sous la licence com­mer­ciale ou la licence GNU-GPLv3 :

  • Qt Charts : com­po­sants d’IU pour l’affichage de dia­grammes es­thé­tiques vi­suel­le­ment (basés sur des modèles de données statiques ou dy­na­miques)
  • Qt Data Vi­sua­li­za­tion : com­po­sants IU pour la vi­sua­li­sa­tion 3D de données
  • Qt Virtual Keyboard : in­fras­truc­ture pour l’im­plé­men­ta­tion de dif­fé­rentes méthodes de saisie ainsi que de claviers virtuels basés sur QML (pla­te­formes cibles : Linux, Windows)
Note

Depuis Qt 5, il existe des modules com­plé­men­taires spé­ci­fiques (« Value-Add Modules ») qui sont dis­po­nibles ex­clu­si­ve­ment en cas d’uti­li­sa­tion d’une licence com­mer­ciale. Le module Qt for Au­to­ma­tion qui contient dif­fé­rentes bi­blio­thèques et dif­fé­rents outils pour le dé­ve­lop­pe­ment de systèmes d’au­to­ma­ti­sa­tion tels que KNX (au­to­ma­ti­sa­tion de bâtiment) en fait notamment partie.

Qt Creator

L’en­vi­ron­ne­ment de dé­ve­lop­pe­ment intégré (IDE) Qt Creator vous apporte de nombreux outils et mé­ca­nismes d’au­to­ma­ti­sa­tion tout au long du processus de dé­ve­lop­pe­ment. Un ges­tion­naire de matériel aide par exemple à la création d’un nouveau projet en vous guidant pas à pas à travers les processus de création et en créant au­to­ma­ti­que­ment toutes les données né­ces­saires. D'autre part, l’IDE accélère l’écriture du code. Pour cela, l’éditeur intégré offre notamment des fonc­tion­na­li­tés telles que la co­lo­ra­tion syn­taxique, la com­plé­tion au­to­ma­tique du code ou la vé­ri­fi­ca­tion des erreurs.

Note

Les paquets binaires pour l’ins­tal­la­tion de Qt Creator (compris dans le té­lé­char­ge­ment de Qt) sont dis­po­nibles pour les systèmes d’ex­ploi­ta­tion Windows (à partir de Windows 7), Ubuntu Linux (à partir de la version 16.04) et macOS (à partir de la version 10.10).

Les outils suivants sont de plus intégrés à l’éditeur par défaut dans Qt Creator :

  • qmake : qmake est intégré di­rec­te­ment en tant que système de cons­truc­tion standard de Qt dans Qt Creator et peut être sé­lec­tionné dans le menu de projet. D’autres systèmes sont également exé­cu­tables dans l’IDE. Afin d’utiliser Qbs, il vous suffit par exemple d’ouvrir un fichier .qbs.
  • Qt Designer : le Qt Designer est le programme natif pour concevoir et créer des in­ter­faces gra­phiques uti­li­sa­teur à l’aide de widgets Qt. L’éditeur visuel permet d’assembler et d’adapter les widgets à volonté.
  • Qt Linguist : les ap­pli­ca­tions peuvent être di­rec­te­ment lo­ca­li­sées dans Qt Creator. Les dé­ve­lop­peurs, tra­duc­teurs et ges­tion­naires de pu­bli­ca­tion trou­ve­ront les outils ap­pro­priés à cette fin.
  • Qt Assistant : avec l’assistant Qt, le Qt Creator fournit un accès rapide à la do­cu­men­ta­tion of­fi­cielle de l’in­fras­truc­ture. Une fonction d’aide est pour cela dis­po­nible.

Le dé­ve­lop­pe­ment du logiciel fonc­tionne avec des signaux et des slots dans Qt

Grâce à la connexion à Python, Ruby, Go, etc., Qt supporte en principe dif­fé­rents langages. Toutefois, le langage de pro­gram­ma­tion natif de l’in­fras­truc­ture reste le C++ dans tous les cas, sachant que l’extension de ce langage orienté sur les objets apporte certains aspects et pa­ra­digmes nouveaux grâce au pré­pro­ces­seur MOC tels que les signaux et slots déjà men­tion­nés. Le concept permet une com­mu­ni­ca­tion dé­clen­chée par un événement entre les com­po­sants de pro­grammes utilisés et constitue une al­ter­na­tive flexible aux fonc­tion­na­li­tés de rappel directes (Callbacks). Il permet par exemple d’associer des objets ou des modules, sans que ceux-ci aient forcément à se connaître.

Note

Qt est l’ini­tia­teur du concept signaux/slots et a marqué con­si­dé­ra­ble­ment le dé­ve­lop­pe­ment de ce concept au fil des ans. Aujourd’hui, bon nombre d’autres bi­blio­thèques de programme et d'in­fras­truc­tures, comme Flow, ont recours à ce modèle d’as­so­cia­tion.

Con­crè­te­ment, le signal est un message qui envoie un objet dès qu’un événement survient. Con­cer­nant les slots, il s’agit d’une fonc­tion­na­lité ha­bi­tuelle qui peut être associée à un signal afin de toujours être exécutée par la suite lorsqu’elle reçoit le signal. Il est possible d’associer un signal avec plusieurs slots de telle sorte que plusieurs fonc­tion­na­li­tés peuvent être appelées comme résultat d’un événement unique. De même, le concept de pro­gram­ma­tion autorise l’as­so­cia­tion de plusieurs signaux avec un slot unique. Dans ce cas, une seule et même fonc­tion­na­lité est appelée lors de la sur­ve­nance de dif­fé­rents évé­ne­ments.

Les signaux et les slots con­tri­buent à apporter une fonc­tion­na­lité axée sur les évé­ne­ments dans les in­ter­faces uti­li­sa­teurs de l’ap­pli­ca­tion dé­ve­lop­pée. Dans Qt, vous n’avez toutefois pas à créer la­bo­rieu­se­ment les as­so­cia­tions signal/slot ma­nuel­le­ment une à une : un grand nombre de classes fournies avec le framework offrent un accès à divers signaux et slots pré­dé­fi­nis. En cas de besoin, il est toutefois possible de créer également vos propres as­so­cia­tions d’objets.

Que permet le langage de balisage QML propre à Qt ?

Depuis la version 4.7, Qt est doté de son propre langage de balisage QML. Celui-ci se distingue notamment par le fait qu’il dispose d’une syntaxe similaire à JSON et supporte des ex­pres­sions Ja­vaS­cript im­pé­ra­tives. Cependant, ce langage est avant tout marqué par la des­crip­tion dé­cla­ra­tive des éléments des IGU qui fournit un code de programme clair. QML associe donc des approches dé­cla­ra­tives et im­pé­ra­tives dans un même langage de pro­gram­ma­tion qui laisse au dé­ve­lop­peur une grande marge manœuvre. Si vous avez sé­lec­tionné le module Qt Quick, grâce au com­pi­la­teur Qt Quick, vous disposez d’un outil adapté et prêt à l’emploi pour la com­pi­la­tion du code QML dans le C++ natif. Vous pouvez par ailleurs utiliser le designer du même nom (Qt Quick Designer) dans Qt Creator, afin de tra­vail­ler avec des com­po­sants QML préé­ta­blis.

QML révèle en par­ti­cu­lier ses points forts dans le cadre du dé­ve­lop­pe­ment d’IGU : en raison de la syntaxe con­si­dé­ra­ble­ment plus simple et de la prise en charge de Ja­vaS­cript, le langage permet aux designers un accès gran­de­ment amélioré au C++. Il est ainsi possible de créer sans dif­fi­culté des in­ter­faces uti­li­sa­teur codées en JSON par une ex­por­ta­tion depuis Photoshop, ce qui accélère con­si­dé­ra­ble­ment le processus de dé­ve­lop­pe­ment. Même si en théorie, il est possible de coder l’in­té­gra­lité du programme en QML, le langage de balisage est plutôt rarement utilisé pour la pro­gram­ma­tion de la logique d’ap­pli­ca­tion.

Note

De bien des points de vue, le QML a rendu la création d’IU via les widgets superflue. Le langage de balisage dévoile notamment ses atouts lorsqu’il s’agit d’ani­ma­tions et de mises en page et com­po­sants de contrôle en­tiè­re­ment spé­ci­fiques à l’uti­li­sa­teur (mobile, écran tactile, etc.). En revanche, s’il s’agit d’éléments de commande d’or­di­na­teurs de bureau tra­di­tion­nels tels que des barres de menu, des barres d’outils ou des com­po­sants glisser-déposer, les widgets offrent une meilleure prise en charge, ce qui explique pourquoi leur uti­li­sa­tion est encore très largement répandue dans les en­vi­ron­ne­ments d’or­di­na­teurs de bureau clas­siques.

Sur quelles pla­te­formes fonc­tionne Qt ?

Qt est pris en charge par dif­fé­rentes pla­te­formes 32 et 64 bits. Pour utiliser le framework, GCC ou un autre com­pi­la­teur est en règle générale suffisant. Pour utiliser Qt Quick, Open GL, DirectX ou un autre moteur de rendu est par ailleurs né­ces­saire. Pour la version actuelle de Qt, l’équipe de dé­ve­lop­peurs a dressé la liste de pla­te­formes of­fi­ciel­le­ment prises en charge suivante :

Pla­te­forme Version Com­pi­la­teur
Windows 10, 8.1, 7, UWP (Universal Windows Platform) MSVC 2017, MSVC 2015, MinGW 5.3
Linux/X11 openSUSE 42.2, Red Hat En­ter­prise Linux 6.6 et 7.2, Ubuntu 16.04 GCC (à partir de la version 4.8), ICC
Android à partir de la version 4.1 GCC, MinGW 5.3
macOS etc. macOS (à partir de la version 10.11), iOS 10 et 11, tvOS 10 et 11, watchOS 3 et 4 Clang (Apple)
Systèmes intégrés Embedded Linux, Embedded Linux (Boot2Qt), QNX 6.6.0 et 7.0, INTEGRITY 11.4.4 GCC

Dans quel cadre Qt est-il utilisé ?

Le plus gros projet de logiciel connu dans lequel l’in­fras­truc­ture Qt est utilisée est pro­ba­ble­ment KDE Plasma (au­pa­ra­vant KDE Plasma Works­paces). Il s’agit ici d’une gamme d’en­vi­ron­ne­ments d’or­di­na­teurs de bureau ou, depuis la version 5, d’un en­vi­ron­ne­ment flexible unique de la com­mu­nauté open source KDE pour dif­fé­rents appareils (or­di­na­teur fixe, Notebook, Netbook, tablette, smart­phone). Ce faisant, les mises en page et les éléments de contrôle sont façonnés sur mesure pour les exigences des appareils concernés dans les dif­fé­rentes variantes d’or­di­na­teurs de bureau grâce à Qt.

D’autres exemples marquants de logiciels fonc­tion­nant sur la base de Qt montrent à quel point les scénarios d’ap­pli­ca­tion de l'in­fras­truc­ture sont po­ly­va­lents :

Mul­ti­mé­dia :

  • le programme de trai­te­ment des images Adobe Photoshop Elements
  • le programme de gestion des images Adobe Photoshop Album
  • le lecteur mul­ti­mé­dia VLC Media Player
  • l’ap­pli­ca­tion Linux du service de musique en streaming Spotify

Com­mu­ni­ca­tion :

  • l’édition Linux de l’outil de com­mu­ni­ca­tion Skype
  • le service de mes­sa­ge­rie ins­tan­ta­née Telegram
  • le logiciel de con­fé­rence vocale TeamSpeak

Partage de fichiers :

  • le client P2P Marabunta
  • le ges­tion­naire de té­lé­char­ge­ment KDE KGet
  • le client Bit­Tor­rent Trans­mis­sion

Outils gra­phiques 3D :

  • le logiciel de mo­dé­li­sa­tion 3D Adobe Muse CC
  • le logiciel de vir­tua­li­sa­tion 3D Autodesk Maya
  • le logiciel CAD AutoQ3D

Jeux :

  • Monkey Island
  • Dust Racing 2D

Autres :

  • le programme de mise en page Scribus
  • le logiciel de ma­thé­ma­tique Ma­the­ma­tica
  • le logiciel de notation et de com­po­si­tion Sibelius

En résumé : in­fras­truc­ture flexible pour des projets mul­ti­pla­te­formes po­ly­va­lents

Qt est une in­fras­truc­ture vieille comme Hérode qui s’est cons­tam­ment adaptée aux exigences des IGU modernes. Ce n’est pas un hasard si, plus de deux décennies après la sortie de la première version, cette col­lec­tion d’outils codée en C++ fait également partie des solutions les plus ap­pré­ciées pour le dé­ve­lop­pe­ment mul­ti­pla­te­formes d’in­ter­faces gra­phiques uti­li­sa­teur. Cet en­goue­ment est notamment dû à des outils tels que le Qt Creator ou au langage de balisage QML im­plé­menté dans les nouvelles versions qui op­ti­mi­sent non seulement le processus de travail en général mais sim­pli­fient également la col­la­bo­ra­tion entre les designers et les pro­gram­meurs.

Aller au menu principal