Le modèle objet de QT

Transcription

Le modèle objet de QT
Le modèle objet de QT
●
Communication basée sur les concepts de
« Signaux » et « Slots »
●
Gestion des évenements
●
Gestion des « Timers »
●
Composition d'objets
●
Pointeurs protégés
Signaux/Slots
●
●
●
Tout objet QT (descendant de QObject) peut
émettre des signaux dans l'environnement pour
indiquer (en général) un changement d'état
pouvant être intéressant pour d'autres objets
Tout objet QT peut réagir à des signaux émis
en exécutant des méthodes particulières
appelées « SLOTS »
Ce mécanisme favorise la réutilisabilité des
composants
●
●
●
●
●
Signal --> notification d'un évènement
Slot --> méthode pouvant être déclenchée par
un signal
Plusieurs signaux peuvent être connectés à un
même slot et un même signal peut être
connecté à plusieurs slots
Les param du signal sont transmis au slot
auquel il est connecté
Un slot peut avoir moins de param que le signal
associé
Pour connecter un signal à un slot :
connect (objS, SIGNAL(nomSignal(...)),
objD, SLOT(nomSlot(...)) )
Pour émettre un signal :
emit nomSignal(...)
objD
NomSlot(...)
{
...
}
emit nomSignal(...)
objS
obj...
class Pile : public QObject
{
Q_OBJECT
// macro pour utiliser le modèle QT
private:
int Tab[100];
int nbElem;
...
public slots:
// méthodes de type Slots (aussi private ou protected)
void Empiler( int val );
...
signals:
// déclaration des signaux
void newElem( int val );
// pas d'implémentation
void risqueDebordement( );
};
...
void Pile::Empiler( int val)
{
if (nbElem < 100) {
Tab[nbElem++] = val;
emit newElem( val );
if (nbElem > 90)
emit risqueDebordement( );
}
}
...
Organisation du source pour un
projet
●
Un prog principal : main.cpp
●
Pour chaque classe (composant) : 2 fichiers
●
–
nomClasse.h : définition de la classe
–
nomClasse.cpp : implémentation des méthodes
L'utilitaire moc permet de traduire le modèle QT
(signaux/slots...) en du C++ standard
–
Préprocesseur
moc nomClasse.h -o moc_nomClasse.cpp
●
L'utilitaire qmake génère un Makefile prêt à
l'emploi
Exemple de main.cpp :
#include <QApplication>
#include <QPushButton>
int main( int argc, char *argv[ ] )
{
QApplication app( argc, argv );
QPushButton hello( "Hello world!" ); // pas de parent donc Toplevel (une fenêtre)
hello.resize(100, 30);
hello.show();
return app.exec( );
// boucle principale : traitement des évènements
}
Pour la construction de l'exécutable (build) :
qmake -project // génère un fichier projet (.pro)
qmake
// génère un Makefile à partir du fichier projet
make
// utilise le Makefile pour générer l'exécutable (compilation+édition de liens)
Les Makefiles
●
Automatiser la construction d'exécutables
●
Formés par des règles de la forme:
cibles : dépendances ...
commandes ...
●
Contiennent des définitions de variables
VAR1 = .....
# initialisation de variables
$(VAR1)
# utilisation de variables
Règles
●
Explicites
main.o : main.cpp init.h
g++ -c main.cpp
prog: main.o composant1.o
g++ -o prog composant1.o main.o -lqt
●
Implicite
%.o : %.c
Variables prédéfinies
A chaque exécution d'une règle, un ensemble de
variables (automatiques) est géré
$@
le nom de la cible
$<
le nom de la 1ere dépendance
$^
toutes les dépendances
$*
le radical associé à une règle implicite
si la cible est 'fich.o' et le motif dans la règle est %.o alors
$* vaut 'fich'
Exemples:
CFLAGS = -I /usr/lib/qt4/include -I .
CC = gcc
%.o : %.c
$(CC) -c -o $@ $(CFLAGS) $<
un fichier.c est transformé (compilé) en un fichier.o
par le compilateur indiqué dans $(CC) en utilisant
les options spécifiées dans $(CFLAGS)
moc_%.cpp : %.h
moc $< -o $@
règle automatisant l'utilisation de moc pour les
headers des classes QT

Documents pareils