« Programmation Qt/Un premier programme » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Ligne 41 : Ligne 41 :
mingw32-make
mingw32-make


Si aucune erreur ne se produit, le fichier HelloWorld.exe a été créé.
Si aucune erreur ne se produit, le fichier exécutable a été créé :
* <tt>HelloWorld.exe</tt> sous Windows
* <tt>HelloWorld</tt> ou <tt>a.out</tt> sous Unix, Linux
Dans le cas contraire :
Dans le cas contraire :
* vérifiez que vous avez bien tapé le code source ci-dessus,
* vérifiez que vous avez bien tapé le code source ci-dessus,

Version du 23 mars 2012 à 14:15

Ce chapitre propose de créer un premier programme et de le compiler en utilisant des lignes de commandes, afin de se familiariser rapidement aux mécanismes de compilation de Qt.

Afficher un bouton

Ce premier programme crée un bouton et l'affiche dans une fenêtre automatiquement créée par Qt.

Fichier

HelloWorld.cpp
Programme simple affichant un bouton "Hello world !"
#include <QApplication>
#include <QPushButton>

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


Compilation

Pour compiler le programme :

  1. Ouvrez une fenêtre de commande.
  2. Assurez vous d'avoir le répertoire du compilateur C++ et celui de Qt dans le PATH.
  3. Créez le fichier projet Qt HelloWorld.pro :
qmake -project
  1. Créez le fichier Makefile à partir du fichier projet :
qmake
  1. 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, le fichier exécutable a été créé :

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

Dans le cas contraire :

  • vérifiez que vous avez bien tapé le code source ci-dessus,
  • vérifiez que vous avez bien utilisé les mêmes noms de fichier,
  • vérifiez que vous avez bien tapé les commandes de compilation,
  • vérifiez l'installation du compilateur C++ et de Qt.

Exécution

Au lancement du programme, une fenêtre s'affiche avec un bouton "Hello world!" au centre de celle-ci.

Code source expliqué

Voici le détail du code source expliqué :


#include <QApplication>
#include <QPushButton>

Inclusion des fichiers d'en-tête définissant les deux classes utilisées dans le programme.


int main(int argc, char* argv[])
{

Déclaration standard de la fonction principale lançant l'application.


    QApplication app(argc, argv);

Création de l'instance unique de la classe QApplication définissant la configuration par défaut des éléments graphiques.

Les arguments de la ligne de commande sont passés aux constructeur pour qu'il interprète certaines options. Les options reconnues et traitées sont retirées du tableau au retour du constructeur pour que l'application ne les traitent pas à son tour. Parmi les options traitées :

Nom du programme argv[0]
Le nom du programme (sans extension .exe sous Windows) est utilisé comme nom par défaut pour l'application et comme titre par défaut pour les fenêtres.
-display
(X11 seulement) Sélectionne le display ($DISPLAY par défaut)
-style style
Sélectionne le style utilisé par les éléments de l'interface.

Pour plus de détails sur les options traitées, voir http://doc.qt.nokia.com/4.7-snapshot/qapplication.html#QApplication


    QPushButton hello("Hello world!");

Création d'un bouton dont le texte "Hello world!" est passé en paramètre du constructeur.


    hello.resize(100,30);

Redimensionne le bouton à 100 pixels de largeur et 30 de hauteur.


    hello.show();

Affiche le bouton dans une fenêtre créée pour le contenir.


    return app.exec();

Lancement l'exécution de la boucle traitant des évènements. La méthode exec() retourne le code de retour du programme.


}

Fin de la fonction principale.


Un second programme

Voici un programme très simple qui permettra l'affichage d'une fenêtre, plus précisément la fenêtre principale.

Cette fois-ci le fichier projet sera créé manuellement. Celui-ci définit le modèle de programme à produire (app pour une application), et la liste des fichiers sources et en-têtes.

essais.pro
Description du projet Qt
TEMPLATE = app
SOURCES  = main.cpp \
           mainwindow.cpp
HEADERS  = mainwindow.h


main.cpp
Fonction principale de lancement de l'application
#include <QApplication>
#include "mainwindow.h"

int main ( int argc, char *argv[] )
{
    QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    return app.exec();
}


mainwindow.h
En-tête pour la classe de la fenêtre principale
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow();

};

#endif


mainwindow.cpp
Implémentation de la classe de la fenêtre principale
#include <QtGui>
#include "mainwindow.h"

MainWindow::MainWindow()
{
}


Compiler un programme Qt

Pour compiler les programmes Qt il y a une nouvelle procédure à faire :

Vous devez ouvrir une console qui est fournie avec la bibliothèque Qt qui s'appelle "Qt4.5.0 Command Prompt" et ensuite vous dirigez vers le dossier du projet (ex : cd C:\Users\pseudo\projets\test). Ensuite vous devez taper 3 commandes qui sont :

  • qmake -project : qui génére un fichier .pro qui donne la liste des fichiers .cpp et .h du projet.
  • qmake : qui génére un fichier MakeFile à partir du fichier .pro.
  • make : qui compilera votre projet.

Si vous éxécutez votre projet directement par le .exe, cela affichera une erreur. Il faut rajouter les DLL dans le dossier debug de votre projet qui sont : mingwm10.dll, QtCore4.dll et QtGui4.dll que vous pourrez trouver dans les chemins suivants C:\MinGW\bin et C:\Qt\4.3.2\bin (faut chercher).

Ou, il y a un moyen plus simple qui est : dans la même console taper le chemin du dossier qui contient le .exe qui est : soit "debug" soit "release" (cd debug ou cd release), ensuite vous tapez le nom du .exe (ex test)


Analyse

  • Le fichier essais.pro répertorie les différents fichiers du projet.
  • On déclare app objet de la classe QApplication et mainWin objet de la classe MainWindow.
  • MainWindow est une classe dérivée de QWidget à laquelle on ne va pour l'instant rien ajouter.


Résultat

Après compilation on obtient une fenêtre vide (une image arrivera sous peu), base de la programmation graphique.