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 objets d'une fenêtre > TP : JViewer, un lecteur d'image > Lecture du tutoriel

TP : JViewer, un lecteur d'image

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 659

Plus d'informations Plus d'informations
Dans ce chapitre, nous allons réaliser une application de lecture d'images.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

Cahier des charges

Une image vaut plus qu'un long discours ...

Image utilisateur


Ici on ne voit pas la barre de menu, mais c'est le même principe que le TP précédent.
La difficulté réside dans la gestion des images.

Vous aurez besoin d'utiliser QLabel pour votre widget central.
Pour charger les images QPixmap.

Bon courage.

La solution

Voici ma proposition :

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/*
 * JViewer.java
 * Version : 2 
 *
 * Created on 2 novembre 2007
 * Modified on 13 novembre 2007
 */
 
/* Importation des espaces de nom nécessaires */
import com.trolltech.qt.core.*;
 
import com.trolltech.qt.gui.*;
import com.trolltech.qt.core.Qt.*;
import com.trolltech.qt.gui.QSizePolicy.Policy;
 
/* Définition de l'application et de ses attributs */
public class JViewer extends QMainWindow {
    private String curFile;         // Fichier actuellement ouvert
    private QPixmap pixImage;
    private QLabel widgetImage;     // Conteneur de l'image
    private QMenu fileMenu;         // Menu Fichier
    private QMenu helpMenu;         // Menu Aide
    private QToolBar fileToolBar;   // Barre d'outil Fichier
    private QAction openAct;        // Action Ouvrir
    private QAction sizeToFitAct;        // Action Ouvrir
    private QAction exitAct;        // Action Quitter
    private QAction aboutAct;       // Action A Propos de JEditor
    private QAction aboutQtAct;     // Action A propos de Qt Jambi
    private String rsrcPath = "classpath:images"; // Répertoire des images
    
    /* Définition du constructeur */
    public JViewer()
    {
        setSizePolicy(Policy.Expanding, Policy.Expanding);
        setMinimumSize(240, 160);
 
        QMenuBar menuBar = new QMenuBar();                // On crée la barre de menu
        pixImage = new QPixmap(rsrcPath+"/JViewer.png");
        widgetImage = new QLabel(this);
        widgetImage.setSizePolicy(Policy.Expanding, Policy.Expanding);
        widgetImage.setAlignment(AlignmentFlag.AlignCenter);
        widgetImage.setPixmap(pixImage);
        resize();
 
        setMenuBar(menuBar);                              // On ajoute la barre de menu à notre Application
        setCentralWidget(widgetImage);                    // On ajoute la zone de Texte
        /* On lance les méthodes de création des différents attributs de notre fenêtre */
        try {
              createActions();
 
          } catch (Exception e) {
              e.printStackTrace();
          }
          createMenus();
          createToolBars();
          createStatusBar();
 
          /* Le fichier de départ est un fichier vide */
          setCurrentFile("");
      }
      
      /* Méthode d'ouverture du fichier */
      public void open()
      {
        String fileName = QFileDialog.getOpenFileName(this);
        if (fileName.length() != 0)
          loadFile(fileName);
      }
 
      public void sizeToFit(){
        widgetImage.setPixmap(pixImage.scaled(widgetImage.size(),
                                  AspectRatioMode.KeepAspectRatio, 
                                  TransformationMode.SmoothTransformation));
      }
      
      /* Fonction A propos de JEditor */
      public void about()
      {
          QMessageBox.about(this,
                            tr("A Propos de JViewer"),
                            tr("<b>JViewer<b> est une petite application "+
                              "réalisé par <a href='http://www.trunat.fr/'>Natim</a>. Pour découvrir QT Jambi."));
      }
      
      /* Création des actions des menus et des toolbars */
      private void createActions()
      {
          /* Actions du menu Fichier */
 
          openAct = new QAction(new QIcon(rsrcPath + "/open.png"), tr("&Ouvrir..."), this);
          openAct.setShortcut(tr("Ctrl+O"));
          openAct.setStatusTip(tr("Ouvrir un fichier"));
          openAct.triggered.connect(this, "open()");
          
          sizeToFitAct = new QAction(new QIcon(rsrcPath + "/sizeToFit.tif"), tr("Afficher l'image dans sa taille d'origine"), this);
          sizeToFitAct.setShortcut(tr("Ctrl+A"));
          sizeToFitAct.setStatusTip(tr("Taille d'origine"));
          sizeToFitAct.triggered.connect(this, "resize()");
 
          exitAct = new QAction(new QIcon(rsrcPath + "/exit.png"), tr("Quitter"), this);
          exitAct.setStatusTip(tr("Quitter l'application"));
          exitAct.triggered.connect(QApplication.instance(), "quit()");
          
          /* Action du menu Aide */
          aboutAct = new QAction(new QIcon(rsrcPath + "/about.png"), tr("A Propos de &JViewer"), this);
          aboutAct.setStatusTip(tr("A Propos de JEditor"));
          aboutAct.triggered.connect(this, "about()");
          aboutQtAct = new QAction(new QIcon(rsrcPath + "/qt-logo.png"), tr("A Propos de &Qt"), this);
          aboutQtAct.setStatusTip(tr("Show the Qt library's About box"));
          aboutQtAct.triggered.connect(QApplication.instance(), "aboutQt()");
      }
      
      /* Création des Menus */
      private void createMenus()
      {
          /* Menu fichier */
          fileMenu = menuBar().addMenu(tr("&Fichier"));
          fileMenu.addAction(openAct);
          fileMenu.addAction(sizeToFitAct);
          fileMenu.addSeparator();
          fileMenu.addAction(exitAct);
 
          /* Menu Aide */
          helpMenu = menuBar().addMenu(tr("&Aide"));
          helpMenu.addAction(aboutAct);
          helpMenu.addAction(aboutQtAct);
      }
      
      /* Création de la barre de menu */
      private void createToolBars()
      {
          fileToolBar = addToolBar(tr("Fichier"));
          fileToolBar.addAction(openAct);
          fileToolBar.addAction(sizeToFitAct);
          fileToolBar.addSeparator();
          fileToolBar.addAction(exitAct);
      }
      
      /* Création de la Barre de Status */
      private void createStatusBar()
      {
          statusBar().showMessage(tr("Pret"));
      }
            
      /* Charger un fichier */
      public void loadFile(String fileName)
      {
          pixImage = new QPixmap(fileName);
          if(pixImage == null){
            QMessageBox.warning(this, tr("JViewer"), String.format(tr("Erreur à l'ouverture de l'image %1$s:\n%2$s."), fileName));
            return;
          }
          widgetImage.clear();
          widgetImage.setPixmap(pixImage);
          resize();
          setCurrentFile(fileName);
 
          statusBar().showMessage(tr("Image Chargée"), 2000);
      }
      
      /* On enregistre le nom du fichier ouvert comme nom du fichier courant */
      public void setCurrentFile(String fileName)
      {
          curFile = fileName;
          setWindowModified(false);
 
          String shownName;
          if (curFile.length() == 0)
              shownName = tr("Aucun fichier");
          else
              shownName = curFile;
 
          setWindowTitle(String.format(tr("%1$s[*] - %2$s"), shownName, tr("JViewer")));
      }
      
      protected void paintEvent(QPaintEvent e) {
        sizeToFit();
      }
      
      protected void resize(){
        if(pixImage.size().subtract(new QSize(240,160)).isValid()){
          super.resize(pixImage.size().add(size().subtract(widgetImage.size())));
        }else{
          super.resize(new QSize(240,160));
          widgetImage.setPixmap(pixImage);
        }
      }
      
      /* Lancement de l'application */
      public static void main(String[] args) {
            QApplication.initialize(args);
 
            JViewer application = new JViewer();
            application.show();
 
            QApplication.exec();
      }
}


Si vous en avez une différente, vous pouvez la poster en commentaire de ce tutoriel, on pourra comparer les fonctionnalités et si elle est mieux que la mienne, elle pourra la remplacer comme solution.

En conclusion, je dirai simplement que vous avez toutes les clefs en mains pour réussir, alors à vous de jouer.
Pour voir l'application finie, allez ici.
Chapitre précédent Sommaire
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.
1 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 166 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0262s (0.0151s)