Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Bibliothèques > Qt > Du Qt en Java avec Qt Jambi > Les signaux et les slots > Connecter les objets entre eux > Lecture du tutoriel

Connecter les objets entre eux

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Natim
Visualisations : 1 687

Plus d'informations Plus d'informations
Un objet Qt (dérivant de QObject) peut utiliser les mécanismes de signaux/slots.
Ce mécanisme est une implémentation du pattern observateur qui consiste à émettre un signal sans connaitre le(s) destinataire(s), et recevoir un signal sans connaitre l'émetteur (bien que l'on puisse le savoir si nécessaire, ce n'est en général pas nécessaire).

La manière dont elle a été portée pour Qt Jambi est très intéressante.
Lisez plutôt ...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Le principe du MVC (Model, View, Controller)

Lorsqu'on programme une interface graphique, il est recommandé d'utiliser le principe du MVC.

Je vais vous expliquer ce principe tel que je l'ai compris.
Si vous le connaissez mieux que moi, merci de corriger mes erreurs ou imprécisions pour en faire profiter tout le monde.


Le MVC est une méthode de conception pour le développement d'applications qui permet de séparer le développement en trois parties.



Vous pouvez lire le très bon article de wikipédia en français à ce sujet.
Pour ceux qui n'ont pas de problèmes avec l'anglais vous pouvez lire l'explication du MVC dans la doc de Qt ainsi que le très bon article de Steve Burbeck sur la manière d'utiliser cette méthode.



On utilise très souvent ce type de méthode pour la réalisation d'applications web.
On peut citer par exemple des framework tels que :


Le fait d'utiliser le MVC dans le milieu du web est un choix de développement très important.
Avec Qt, il est aussi largement souhaitable d'utiliser cette méthode.

Le principe avec Qt

On voit que les objets ont besoin de communiquer entre eux.
Prenons pour exemple ce petit programme :
Mon LCD


Comme nous pouvons le voir, il est composé d'un QLCDNumber, d'un QSlider et d'un QPushButton le tout agencé dans un QVBoxLayout

Vous pouvez le réaliser comme cela :
Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QWidget;
import com.trolltech.qt.gui.QLCDNumber;
import com.trolltech.qt.gui.QSlider;
import com.trolltech.qt.gui.QPushButton;
import com.trolltech.qt.gui.QVBoxLayout;
 
import com.trolltech.qt.core.Qt;
 
public class MonLCD1 extends QWidget
{
        public MonLCD1()
        {
            QLCDNumber lcd = new QLCDNumber(2);
            QSlider slider = new QSlider(Qt.Orientation.Horizontal);
            QPushButton quit = new QPushButton(tr("Quit"));
            
            QVBoxLayout layout = new QVBoxLayout();
            layout.addWidget(lcd);
            layout.addWidget(slider);
            layout.addWidget(quit);
            setLayout(layout);
            
            setWindowTitle(tr("Mon LCD"));
        }
        
        public static void main(String args[])
        {
            QApplication.initialize(args);
        
            MonLCD1 widget = new MonLCD1();
            widget.show();
        
            QApplication.exec();
        }
}


Si vous lancez le code, vous verrez que ce n'est qu'une simple boite de dialogue avec quelques widget posés dedans.
Le but maintenant ce serait de connecter un peu tout cela.
Pour que lorsqu'on bouge le slider ça change la valeur inscrite sur le LCD et que lorsque l'on clique sur le bouton Quit, ça quitte l'application.

Le principe des Signaux

Si on regarde la doc pour la classe QSlider, on voit que celle ci possède les signaux suivant :

SignalDescription
valueChanged Ce signal est émis lorsque la valeur du slider a changé
sliderPressed Ce signal est émis lorsque l'utilisateur commence à déplacer le slider.
sliderMoved Ce signal est émis lorsque l'utilisateur bouge le slider
sliderReleased Ce signal est émis lorsque l'utilisateur relâche le bouton.


Pour savoir qu'un signal a été émis, on doit le connecter à une méthode.

Dans le cas de notre objet, ce qui pourrait être bien c'est d'afficher la valeur de notre slider sur l'écran LCD.

Connecter notre signal

Ce qu'il nous faut, c'est changer la valeur du LCD en fonction de celle du slider.

La méthode display de QLCDNumber, nous permet de faire cela.
Le signal envoyé par valueChanged nous envoi la valeur modifiée.

Il nous suffit donc de connecter le signal valueChanged(int) du slider avec la méthode display(int) de lcd.

Voici comment on fait cela :
Code : Java
1
slider.valueChanged.connect(lcd, "display(int)");


De même, nous souhaitons que notre bouton quitte l'application.

Nous allons donc connecter le signal clicked() du bouton à la méthode quit de QApplication.
Cependant, nous avons besoin de passer en paramêtre la référence de l'objet QApplication.
Pour la récupérer, il nous faut utiliser QApplication.instance().

Code : Java
1
quit.clicked.connect(QApplication.instance(), "quit()");


Ajoutez ces deux lignes à la fin du constructeur de MonLCD et observez le résultat ...

Une application fonctionnelle

Pour bien faire les choses, nous aurions pu créer un nouveau widget LCDRange qui soit un LCD modifiable par un slider.
Voici ce que ça donne avec quelques modifications de style en plus :

Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import com.trolltech.qt.gui.*;
import com.trolltech.qt.core.Qt;
 
public class MonLCD extends QWidget
{
        public MonLCD()
        {
            LCDRange lcdRange = new LCDRange();
                
            QPushButton quit = new QPushButton(tr("Quit"));
            quit.setFont(new QFont("Times", 18, QFont.Weight.Bold.value()));
            quit.clicked.connect(QApplication.instance(), "quit()");   
            
            QVBoxLayout layout = new QVBoxLayout();
            layout.addWidget(lcdRange);
            layout.addWidget(quit);
            setLayout(layout);
            
            setWindowTitle(tr("Mon LCD"));
        }
        
        class LCDRange extends QWidget
        {
            public LCDRange()
            {
                QLCDNumber lcd = new QLCDNumber(2);
                lcd.setSegmentStyle(QLCDNumber.SegmentStyle.Filled);
        
                QSlider slider = new QSlider(Qt.Orientation.Horizontal);
                slider.setRange(0, 99);
                slider.setValue(0);
        
                slider.valueChanged.connect(lcd, "display(int)");
        
                QVBoxLayout layout = new QVBoxLayout();
                layout.addWidget(lcd);
                layout.addWidget(slider);
                setLayout(layout);
            }
        }
        
        public static void main(String args[])
        {
            QApplication.initialize(args);
        
            MonLCD widget = new MonLCD();
            widget.show();
        
            QApplication.exec();
        }
}

Un petit exercice

Pour mettre en ?uvre tout ce que nous avons vu au cours des précédents chapitres, vous pouvez essayer de faire quelque chose dans le genre :
Un petit exercice


Secret (cliquez pour afficher)
La solution ce trouve ici : http://doc.trolltech.com/qtjambi-4.3.2_01/com/trolltech/qt/qtjambi-tutorial6.html

Nous avons vu comment utiliser les signaux, mais si on veut en envoyer ? :euh:
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 13/10/2007 à 04:20:33
Modifié : le 08/11/2008 à 20:41:36
Avancement : 100%
Licence : Creative Commons BY-SA

L'orthographe, la grammaire et la présentation de ce tutoriel ont été vérifiées par les zCorrecteurs.
0 commentaire

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 123 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0224s (0.0105s)