Qt

Un article de Wikipédia, l'encyclopédie libre.

Qt
Développeur Trolltech
Dernière version 4.4.0 (le 6 mai 2008)
Environnement Linux, Windows, Windows CE, Mac OS X, BSD, Unix
Type Bibliothèque logicielle
Licence Qt Commercial License et GNU GPL (principalement)[1]
Site web trolltech.com/products/qt

Qt est une bibliothèque logicielle orientée objet et développée en C++ par la société Trolltech. Elle offre des composants d'interface graphique (widgets), d'accès aux données, de connexions réseaux, de gestion des fils d'exécution, d'analyse XML, etc.

Qt permet la portabilité des applications qui n'utilisent que ces composants par simple recompilation du code source. Les environnements supportés sont les Unix (dont Linux) qui utilisent le système graphique X Window System, Windows et Mac OS X.

Qt est notamment connu pour être la bibliothèque sur laquelle repose l'environnement graphique KDE.

Sommaire

[modifier] Histoire

C'est au Norwegian Institute of Technology à Trondheim que Haavard Nord (CEO de Trolltech) et Eirik Chambe-Eng (président de Trolltech) se rencontrent. En 1988 Haavard Nord est chargé par une entreprise suédoise de développer une bibliothèque en C++ pour gérer une interface graphique, c'est la première fois qu'il commence à aborder le sujet [2]. Deux ans plus tard, avec Eirik Chambe-Eng il développe une application multi-plateforme (Unix, Macintosh et Windows) et commencent sérieusement à réfléchir à la conception d'une bibliothèque graphique multi-plateforme généraliste et en 1991 ils en commencent le développement. L'année suivante, Eirik Chambe-Eng propose le principe des "signaux et slots", qui devient la pierre angulaire de Qt. Et en 1993 le noyau de Qt est prêt et permet de développer ses propres composants graphiques. C'est à la fin de cette année que Haavard Nord propose de créer une entreprise pour commercialiser leur bibliothèque [2].

Quasar Technologies est créé le 4 mars 1994 et renommé six mois plus tard en Troll Tech, puis Trolltech. Les débuts sont particulièrement difficiles financièrement. Mais ils ont la chance d'être mariés et que leurs femmes puissent subvenir au besoins de leurs maris [2].

Le projet a été nommé "Qt" parce que le caractère "Q" était joli dans l'écriture Emacs de Haavard, et le "t" provient de Xt Xtoolkit. Le tout se prononçant en anglais "cute", ce qui se traduit par "mignon". Le t étant minuscule, on ne prononce pas "cutie". Ce n'est pas un acronyme (QT) [2].

C'est en avril 1995 que Trolltech a son premier client, l'entreprise norvégienne Metis. Et durant presque un an elle est le seul, rendant l'entreprise très fragile financièrement. Son second client, l'Agence spatiale européenne (ESA), arrive en mars 1996 et lui achète dix licences [2].

Le 26 mai 1995 est annoncée la première version publique de Qt sur le newsgroup comp.os.linux.announce [3]. Et un an plus tard la version 0.97, puis le 24 septembre 1996 la version 1.0 est publié et annoncée quelques jours plus tard sur [4].

C'est en 1997 que le projet KDE est lancé par Matthias Ettrich (qui est embauché par Trolltech l'année suivante), ce dernier prend la décision d'utiliser Qt comme bibliothèque de base. Le fait qu'un projet de cette envergure utilise Qt sera une très bonne publicité pour Trolltech et sa bibliothèque. Depuis, les liens entre Trolltech et KDE n'ont fait que se renforcer.

La seconde version majeure de Qt est publiée en juin 1999 et une version pour les systèmes embarqués, Qt/Embedded qui est depuis connue sous le nom de Qtopia, est publiée en 2000. Cette dernière version est conçue pour Linux et utilise directement son framebuffer, sans passer par le système de fenêtrage X11 (qui est inadapté pour l'embarqué) [5].

Les deux premières versions majeures de Qt sont disponibles uniquement pour Unix et Windows, le support de Mac OS X arrive avec la version 3.0, qui est publiée en 2001. Par rapport à la version 2.0, cette nouvelle version apporte un meilleur support de l'internationalisation, de l'unicode ou encore des expressions rationnelles comme en Perl.

Le 28 juin 2005, la version 4 est publiée et améliore notamment le moteur de rendu, la séparation entre données et présentation et sépare la bibliothèque en modules :

  • QtCore : pour les fonctionnalités non graphiques utilisées par les autres modules ;
  • QtGui : pour les composants graphiques ;
  • QtNetwork : pour la programmation réseau ;
  • QtOpenGL : pour l'utilisation d'OpenGL ;
  • QtSql : pour l'utilisation de base de données SQL ;
  • QtXml : pour la manipulation et la génération de fichiers XML ;
  • QtDesigner : pour étendre les fonctionnalités de Qt Designer, l'assistant de création d'interfaces graphiques ;
  • QtAssistant : pour l'utilisation de l'aide de Qt ;
  • Qt3Support : pour assurer la compatibilité avec Qt 3 ;

À cela s'ajoute pour la version commerciale sous Windows deux autres modules liés à l'utilisation d'ActiveX : QAxContainer et QAxServer

Avec l'évolution de Qt 4, d'autres modules sont conçus :

  • QtDBus : pour la communication inter-processus en utilisant D-Bus (uniquement sous UNIX à partir de Qt 4.2) ;
  • QtScript : pour l'évalution de scripts utilisant Qt Script (à partir de Qt 4.3) ;
  • QtSvg : pour l'affichage d'images aux formats SVG (à partir de Qt 4.1) ;
  • QtUiTools : pour charger dynamiquement les interfaces graphiques créées avec Qt Designer (à partir de Qt 4.1) ;
  • QtTest : pour effectuer des tests unitaires (à partir de Qt 4.1) ;
  • QtWebKit, portage du moteur de rendu web WebKit (à partir de Qt 4.4) ;
  • Phonon : intégration de Phonon, framework multimédia de KDE4, développé en collaboration avec la communauté KDE (à partir de Qt 4.4) ;

Le 28 janvier 2008, Nokia lance une OPA amicale pour racheter Qt et Trolltech.

[modifier] Licences

Le projet d'environnement graphique KDE a dès le début utilisé la bibliothèque Qt, mais avec le succès de cet environnement, une certaine partie de la communauté du logiciel libre a critiqué la licence de Qt qui était propriétaire et incompatible avec la GNU GPL utilisée par KDE. Ce problème fut résolu par la société Trolltech qui mit la version Unix/Linux de Qt sous licence GNU GPL lorsque l'application développée était également sous GNU GPL, pour le reste, c'est la licence commerciale qui entre en application. Cette politique de double licence a été appliquée uniquement pour Unix dans un premier temps, mais depuis la version 4.0 de Qt, elle est appliquée pour tous les systèmes.

Le 18 janvier 2008 Trolltech annonce que la version 3 et 4 de Qt sont à partir de cette date sous licence GPLv2 et GPLv3. Ce changement de version ne s'applique que pour les versions libre de Qt, ainsi la version 3 de Qt pour Windows, qui n'est pas libre, ne voit pas sa licence changer [6]. Ce changement s'inscrit dans le désir de KDE de passer également en version 3 de la GPL, en plus de la version 2 déjà utilisée [7].

Créé en juin 1998, la fondation KDE Free Qt Foundation est chargée de s'assurer de la disponibilité de Qt pour le développement de logiciels libres. Dans le cadre d'un accord avec Trolltech, cette fondation a le droit de diffuser Qt sous une licence de style BSD dans le cas où Trolltech cesserait le développement de la version libre pour diverses raisons, y compris un dépôt de bilan [8]. Le rachat de Trolltech par Nokia le 28 janvier 2008 ne remet pas en cause la politique de double licence, l'entreprise finlandaise soutient même KDE [9].

[modifier] Utilisations

De plus en plus de développeurs utilisent Qt, y compris parmi de grandes entreprises. On peut notamment citer : Google, Adobe Systems ou encore la NASA. Le site de Trolltech contient deux pages recensant les entreprises utilisant Qt [10] et les applications basées sur Qt [11].

Ce qui fait le principal intérêt de Qt est qu'avec le même code source, on peut compiler son projet sur la plupart des plateformes. De plus, Qt est livrée avec un designer qui facilite la conception d'interfaces graphiques, ainsi qu'un assistant qui permet de consulter la documentation officielle hors-ligne.

[modifier] Applications utilisant Qt

[modifier] Architecture

[modifier] Compileur de meta-objets

Le moc [13] (pour Meta Object Compiler) est un pré-processeur qui, appliqué avant compilation au code source d'un programme Qt, génère des meta-informations relatives aux classes utilisées dans le programme. Ces meta-informations sont ensuite utilisées par Qt pour fournir des fonctions non disponibles en C++, comme les signaux et slots et l'introspection.

L'utilisation d'un tel outil additionnel démarque les programmes Qt du langage C++ standard et a été critiquée par une partie de la communauté C++[réf. nécessaire]. En particulier, le choix d'une implantation basée sur des macros a été critiquée pour son absence de sûreté de typage et la pollution de l'espace de noms[réf. nécessaire]. Ce fonctionnement est vu par Trolltech comme un compromis nécessaire pour fournir l'introspection et les mécanismes de signaux. À la sortie de Qt 1.x, les implémentations des templates par les compilateurs C++ n'était pas suffisamment homogènes [14].

[modifier] Bindings

Des "bindings" existent afin de pouvoir utiliser Qt avec d'autres langages que le C++. Ainsi les langages Python (PyQt), Ruby (QtRuby), Ada (QtAda) peuvent être utilisé, mais seul le langage Java à travers Qt Jambi est officiellement supporté par Trolltech.

[modifier] Syntaxe

Le classique Hello World en C++

#include <QApplication>
#include <QPushButton>
 
int main( int argc, char *argv[] )
{
    QApplication app(argc, argv);
 
    QPushButton hello("Hello world!");
 
    hello.show();
 
    return app.exec();
}

La version Java ( QtJambi )

import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QPushButton;
 
public class HelloWorld
{
    public static void main(String args[])
    {
        QApplication.initialize(args);
 
        QPushButton hello = new QPushButton("Hello World!");
 
        hello.show();
 
        QApplication.exec();
    }
}

La version Python ( PyQt )

import qt,sys
 
app=qt.QApplication(sys.argv)
 
hello=qt.QPushButton("Hello World!",None)
 
hello.show()
 
app.exec_loop()

[modifier] Voir aussi

[modifier] Liens internes

  • QPL, la licence d'origine de Qt
Autres bibliothèques généralistes multi-plateformes

[modifier] Liens externes

[modifier] Références

  1. (en) Les licences de Qt
  2. abcde Jasmin Blanchette et Mark Summerfield, C++ GUI Programming with Qt 4, Prentice Hall, 21 juin 2006, 560 p. (ISBN 978-0-13-187249-3), « A Brief History of Qt »
  3. (en) Beta of Motif-like C++ library available, 26 mai 1995, Trolltech. Consulté le 13 décembre 2007
  4. (en) Qt 1.0 released (c++ gui library), 1er octobre 1996, Trolltech. Consulté le 13 décembre 2007
  5. (en) Qtopia Core, 2007, Trolltech. Consulté le 7 janvier 2008
  6. (en) Trolltech releases Qt under the GPL v3 license, 18 janvier 2008, Trolltech. Mis en ligne le 18 janvier 2008, consulté le 19 janvier 2008
  7. (fr) Projects/KDE Relicensing, KDE. Consulté le 19 janvier 2008
  8. (fr) KDE Free Qt Foundation, KDE. Consulté le 28 janvier 2008
  9. (en) Open letter to KDE and the Open Source community - Joint announcement, 28 janvier 2008, Trolltech et Nokia. Mis en ligne le 28 janvier 2008, consulté le 28 janvier 2008
  10. (en) Entreprises utilisant Qt
  11. (en) Applications basées sur Qt
  12. depuis la version 0.9
  13. (en) Utilisation du moc
  14. (en) Pourquoi Qt n'utilise pas les templates pour les signaux et les slots ?