Lars Knoll, le responsable en chef du projet Qt, a publié en mai dernier deux discussions sur les QtLabs pour présenter les approches choisies pour Qt 5 (voir les discussions Thoughts about Qt 5 et Responses to Qt 5). La pensée directrice est résumée dans les phrases suivantes :
« Qt 5 doit être le fondement d'une nouvelle façon de développer des applications. Tout en offrant la puissance de Qt natif en C++, l'accent sera mis sur un modèle où le C++ sera principalement utilisé pour implémenter des fonctionnalités modulaires d'arrière-plan pour Qt Quick », a déclaré Lars Knoll.
Neuf mois de travail, plusieurs centaines d'intervenants et plusieurs milliers de modifications du code ont été nécessaires pour aboutir à cette version alpha. Pour cette première version majeure, l'accent a été mis sur la partie embarquée, proche de la vision que Lars Knoll a décrite, mais il faudra attendre les versions 5.1 ou 5.2 pour que cette vision soit entièrement appliquée pour la version desktop.
Cette version alpha est l'aboutissement d'un travail important sur quatre points : QPA, la pile graphique, la modularité et le nettoyage de l’architecture en déplaçant les QWidgets dans les modules add-ons.
Le Qt Platform Abstraction Layer (QPA)
Pour améliorer la portabilité de Qt, il a été nécessaire de restructurer l'architecture pour isoler toutes les fonctionnalités de bas-niveau qui sont spécifiques à une plateforme. Ce travail a permis d'aboutir au QPA, facilitant le portage de Qt sur toutes nouvelles plateformes. Cette abstraction a été introduite dans Qt 4.8 en remplacement de QWS pour les versions embarquées de Qt, mais elle est maintenant disponible pour toutes les éditions dans Qt 5. La meilleure preuve de l’efficacité de cette abstraction est que plusieurs portages sont en cours de développement : pour QNX, iOS et Android, par exemple.
La réorganisation de la pile graphique
Un autre objectif majeur pour Qt 5 est l'amélioration des performances graphiques, en particulier pour les versions embarquées. Pour ce faire, il a fallu réorganiser la pile graphique, pour bénéficier au maximum de l'accélération matérielle. Pour cela, l'accent a été mis sur l'utilisation d'OpenGL.
Par exemple, QtQuick 2 a subi une réorganisation importante se basant sur le graphe de scène et utilisant OpenGL (GL ES 2 minimum) en arrière-plan. QtGui contient maintenant des classes QOpenGL à la place des classes QGL (maintenues dans le module QtOpenGL pour la compatibilité).
On note l’apparition de nouvelles classes :
- QGuiApplication, plus légère que QApplication (hérite de QCoreApplication et dérivée par QApplication) ;
- QWindow, pour manipuler les fenêtres de premier plan. QWidget et dérivées continuent de fonctionner, comme dans Qt 4, avec QPainter, bien que cet outil soit moins utilisé pour les autres piles graphiques (il est maintenant limité à la rastérisation logicielle sur écran, les images et les pixels, avec un backend OpenGL et un autre pour la génération de PDF et l'impression).
L'architecture modulaire
Objectif : flexibilité, possibilité de choisir ses modules pour les utilisateurs, meilleure intégration de QtMobility, faciliter les contributions en les incluant comme modules tiers. Il s’agit principalement de ménage interne, peu visible par les utilisateurs (toujours en cours).
Déplacer QWidget dans un module indépendant
Déplacer ces classes dans le module "widgets" permet de garantir la continuité des QWidget et dérivés, mais également l'évolution vers d'autres approches (QML et QtQuick). Cela nettoie l’architecture sur le long terme.
Installation et compilation
Il y a plusieurs moyens d'installer Qt 5. Le plus simple est d'utiliser les binaires non officiels, régulièrement mis à jour :
- à partir des dépôts ppa (Linux) : https://launchpad.net/~forumnokia/+archive/fn-ppa ;
- à partir de Git : Building Qt 5 from Git ;
- à partir des sources Qt 5.0 Alpha release en différents format (7z, tar.bz2, tar.gz, tar.xz, zip) ;
- pour compiler : Qt 5 Alpha building instructions.
Passer de Qt 4 à Qt 5
Les changements importants pour conserver la compatibilité du code écrit pour Qt 4 avec Qt 5 sont d’intégrer le module widgets si on utilise des QWidget ou dérivés et de renommer le module QtQuick en quick1. Voici un exemple de code dans le fichier .pro pour garantir la compatibilité :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets QT += quick1 } else { QT += declarative } |
Pour la création de plugins, les macros Q_EXPORT_PLUGIN et Q_EXPORT_PLUGIN2 sont dépréciées et doivent être remplacées par la macro Q_PLUGIN_METADATA, qui permet de lire les informations sans devoir charger le plugin avec la fonction dlopen().
Que pensez-vous de la direction prise par Qt ?
Pensez-vous que Qt Quick et le QML prennent une place trop importante ou au contraire devraient se développer plus ?
Quelles sont les fonctionnalités que vous attendez le plus dans Qt 5 ?
Sources :
- la mailing list pour les retours utilisateurs : http://lists.qt-project.org/pipermail/development/ ;
- le bugtracker pour signaler des bugs : https://bugreports.qt-project.org/se...Dashboard.jspa ;
- la documentation : http://qt-project.org/doc/qt-5.0/ ;
- la description de Qt 5 sur le wiki de qt-project : http://qt-project.org/wiki/Qt-5-Alpha ;
- l'annonce sur QtLabs : http://labs.qt.nokia.com/2012/04/03/qt-5-alpha/ ;
- l'annonce sur le blog de Qt : http://blog.qt.nokia.com/2012/04/03/...of-the-future/ ;
- l'annonce sur le blog de Digia : http://www.digia.com/en/Blogs/Qt-blo...ther-for-Qt-5/.