Programmation C++/Interfaces graphiques

Il est possible en C++ de réaliser des interfaces graphiques portables c'est-à-dire fonctionnant à la fois sous Linux, sous Windows et sous Mac OS.

On parle alors de toolkits.

Citons par exemple :

  • wxWidgets, disponible sous la licence "wxWindows license" qui autorise la création de programmes commerciaux sans pour autant payer de licence, et bien évidemment de créer des logiciels libres ;
  • Qt, disponible de manière gratuite pour l'utilisation dans des projets openSources, sous license GNU LGPL 3 depuis la version 5.7, est une bibliothèque logicielle multiplateforme (Linux, MacOS, Tizen, Windows, ...) ;
  • GTK, il est possible de concevoir des applications open source ou propriétaires avec GTK, il a été initialement créé pour les besoins de GIMP puis a été réutilisé pour réaliser le gestionnaire de fenêtre GNOME ;
  • gtkmm est une bibliothèque logicielle de binding permettant l'utilisation du toolkit GTK en langage C++. C'est l'interface officielle de GTK et GNOME en langage C++. Le nom gtkmm signifie gtk-- (gtk moins moins) assez curieusement car il s'agit pour l'essentiel d'un portage en C++.

Ces toolkits comportent des composants graphiques « standards » ayant la même apparence quelle que soit la plateforme de développement. Pour que cela soit portable, un toolkit existe en différentes versions. Chaque version supporte un système d'exploitation différent et implémente les composants pour celui-ci.

Exemple simple avec Qt

modifier

L'exemple ci-dessous affiche une fenêtre simple. Pour plus de détails, voir le livre sur la programmation Qt.

Le fichier d'extension .pro décrit le projet Qt. Pour cet exemple, créez un fichier nommé app.pro contenant ces 2 lignes :

TEMPLATE += app
QT += widgets

Créez ensuite un fichier nommé app.cpp définissant l'application :

#include <QApplication>
#include <QPushButton>

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

En général, chaque classe de la bibliothèque Qt a un nom commençant par la lettre Q, et sa définition se trouve dans un fichier d'entête du même nom. L'application crée une application, en passant les arguments de la ligne de commande au constructeur, puis crée un bouton affichant "Hello world!" mais sans action associée. Ce bouton est ensuite affichée dans une nouvelle fenêtre. L'appel à la méthode exec() exécute une boucle de traitement d'évènements jusqu'à ce que la fenêtre soit fermée.

Compilation

modifier

La compilation du programme ci-dessous doit aboutir à la production d'un fichier exécutable :

  1. Ouvrez une fenêtre de commande et assurez vous d'avoir le répertoire du compilateur C++ et celui de Qt dans le PATH :
    • Si vous avez installé la version binaire de QtSDK, lancez la console pour Qt :
      • Sous Windows : Démarrer > Tous les programmes > Qt DSK > Desktop > Qt version for Desktop (compilateur)
    • Sinon, configurez la variable d'environnement PATH puis lancer une console de commandes.
  2. Créez le fichier Makefile à partir du fichier projet :
    qmake
  3. Construisez le programme en utilisant le compilateur C++ (GCC, Visual C++, MinGW, ...) :
    • Pour GCC :
    make
    • Pour Visual C++ :
    nmake
    • Pour MinGW :
    mingw32-make

Si aucune erreur ne se produit, deux sous-répertoires debug et release ont été créés, et le fichier exécutable a été créé dans l'un d'eux :

  • app.exe sous Windows
  • app ou a.out sous Unix, Linux

Pour plus de détails voir La section « Compilation » du chapitre « Un premier programme » du livre sur la programmation avec Qt.