Un meilleur job mieux payé ?

Deviens chef de projet, développeur, ingénieur, informaticien

Mets à jour ton profil pro

ça m'intéresse

Qt Jambi : une application avec des menus et des barres d'outils

Le plus souvent, pour organiser tout cela, on utilise des menus, des barres d'outils et une barre de statut. Qt nous propose un objet QMainWindow pour gérer tout cela.

35 commentaires Donner une note à l'article (5)

Article lu   fois.

Les deux auteurs

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. L'objet QMainWindow

La structure d'une fenêtre QMainWindow est la suivante :

Structure de QMainWindow

I-A. La barre menu

La barre de menu en haut de la fenêtre sous Windows et Linux et détachée sous Mac OS X. Les barres de menus sont de type QMenuBar.

I-B. La barre d'outils

Les barres d'outils qui peuvent être en haut, à gauche, à droite ou en bas et déplaçables par l'utilisateur. Les barres d'outils sont de type QToolbar.

I-C. Le dock

Les objets docks sont les objets comme les palettes de couleurs ou les outils dans des logiciels tels que Photoshop ou Flash. Ces objets sont de type QDockWidget.

I-D. Le widget central

Le widget central est le contenu proprement dit de notre application. Ce peut être un widget ou un layout.

I-E. La barre de statut

Cette barre permet d'afficher un message décrivant le statut du programme, la progression d'une action... La barre d'outils est un objet de type QStatusBar.

II. Une première fenêtre d'application

Pour commencer, on va créer notre fenêtre :

JEditor version GTK

Pour ce code, vous aurez besoin du pack d'images.

 
Sélectionnez
/*
 * JEditorDialog.java
 * Version de JEditor sans les signaux 
 *
 * Created on 2 novembre 2007
 * Modified on 17 novembre 2007
 */
 
/* Import des classes espace de nommage nécessaires */
import com.trolltech.qt.QVariant;
 
/* Importation des éléments du GUI */
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QMainWindow;
import com.trolltech.qt.gui.QTextEdit;
import com.trolltech.qt.gui.QMenu;
import com.trolltech.qt.gui.QToolBar;
import com.trolltech.qt.gui.QAction;
import com.trolltech.qt.gui.QMenuBar;
import com.trolltech.qt.gui.QFileDialog;
import com.trolltech.qt.gui.QCloseEvent;
import com.trolltech.qt.gui.QMessageBox;
import com.trolltech.qt.gui.QIcon;
import com.trolltech.qt.gui.QKeySequence;
import com.trolltech.qt.gui.QCursor;
 
/* Définition de l'application et de ses attributs */
public class JEditorDialog extends QMainWindow {
    private String curFile;         // Fichier actuellement ouvert
    private QTextEdit textEdit;     // Widget permettant l'affichage et la modification du texte
    private QMenu fileMenu;         // Menu Fichier
    private QMenu editMenu;         // Menu Edition
    private QMenu helpMenu;         // Menu Aide
    private QToolBar fileToolBar;   // Barre d'outil Fichier
    private QToolBar editToolBar;   // Barre d'outil Edition
    private QAction newAct;         // Action Nouveau
    private QAction openAct;        // Action Ouvrir
    private QAction saveAct;        // Action Enregistrer
    private QAction saveAsAct;      // Action Enregistrer Sous
    private QAction exitAct;        // Action Quitter
    private QAction cutAct;         // Action Couper
    private QAction copyAct;        // Action Copier
    private QAction pasteAct;       // Action Coller
    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 JEditorDialog()
    {
        QMenuBar menuBar = new QMenuBar();                // On crée la barre de menu
        textEdit = new QTextEdit(this);
        setMenuBar(menuBar);                              // On ajoute la barre de menu à notre Application
        setCentralWidget(textEdit);                       // On ajoute la zone de Texte
        /* On lance les méthodes de création des différents attributs de notre fenêtre */
        createActions();
        createMenus();
        createToolBars();
        createStatusBar();
        setUnifiedTitleAndToolBarOnMac(true);
      }
      
      /* Création des actions des menus et des toolbars */
      private void createActions()
      {
          /* Actions du menu Fichier */
          newAct = new QAction(new QIcon(rsrcPath + "/new.png"), tr("&Nouveau"), this);
          newAct.setShortcut(new QKeySequence(tr("Ctrl+N")));
          newAct.setStatusTip(tr("Nouveau fichier"));
 
          openAct = new QAction(new QIcon(rsrcPath + "/open.png"), tr("&Ouvrir..."), this);
          openAct.setShortcut(tr("Ctrl+O"));
          openAct.setStatusTip(tr("Ouvrir un fichier"));
 
          saveAct = new QAction(new QIcon(rsrcPath + "/save.png"), tr("&Enregistrer..."), this);
          saveAct.setShortcut(tr("Ctrl+S"));
          saveAct.setStatusTip(tr("Enregistrer le fichier"));
 
          saveAsAct = new QAction(new QIcon(rsrcPath + "/save_as.png"), tr("Enregistrer Sous..."), this);
          saveAsAct.setStatusTip(tr("Enregistrer le fichier sous ..."));
 
          exitAct = new QAction(tr("Quitter"), this);
          exitAct.setStatusTip(tr("Quitter l'application"));
 
          /* Actions du Menu Edition */
          cutAct = new QAction(new QIcon(rsrcPath + "/cut.png"), tr("Cou&per"), this);
          cutAct.setShortcut(new QKeySequence(tr("Ctrl+X")));
          cutAct.setStatusTip(tr("Couper la séléction"));
 
          copyAct = new QAction(new QIcon(rsrcPath + "/copy.png"), tr("&Copier..."), this);
          copyAct.setShortcut(tr("Ctrl+C"));
          copyAct.setStatusTip(tr("Copier la séléction"));
 
          pasteAct = new QAction(new QIcon(rsrcPath + "/paste.png"), tr("Co&ller..."), this);
          pasteAct.setShortcut(tr("Ctrl+V"));
          pasteAct.setStatusTip(tr("Coller le texte précédemment coupé ou copié"));
          
          /* Action du menu Aide */
          aboutAct = new QAction(new QIcon(rsrcPath + "/about.png"), tr("A Propos de &JEditor"), this);
          aboutAct.setStatusTip(tr("A Propos de JEditor"));
          
          aboutQtAct = new QAction(new QIcon(rsrcPath + "/qt.png"), tr("A Propos de &Qt"), this);
          aboutQtAct.setStatusTip(tr("Show the Qt library's About box"));
          
          cutAct.setEnabled(false);
          copyAct.setEnabled(false);
      }
      
      /* Création des Menus */
      private void createMenus()
      {
          /* Menu fichier */
          fileMenu = menuBar().addMenu(tr("&Fichier"));
          fileMenu.addAction(newAct);
          fileMenu.addAction(openAct);
          fileMenu.addAction(saveAct);
          fileMenu.addAction(saveAsAct);
          fileMenu.addSeparator();
          fileMenu.addAction(exitAct);
 
          /* Menu Edition */
          editMenu = menuBar().addMenu(tr("&Edition"));
          editMenu.addAction(cutAct);
          editMenu.addAction(copyAct);
          editMenu.addAction(pasteAct);
 
          menuBar().addSeparator();
 
          /* Menu Aide */
          helpMenu = menuBar().addMenu(tr("&Aide"));
          helpMenu.addAction(aboutAct);
          helpMenu.addAction(aboutQtAct);
      }
      
      /* Création de la barre de menus */
      private void createToolBars()
      {
          fileToolBar = addToolBar(tr("Fichier"));
          fileToolBar.addAction(newAct);
          fileToolBar.addAction(openAct);
          fileToolBar.addAction(saveAct);
 
          editToolBar = addToolBar(tr("Edition"));
          editToolBar.addAction(cutAct);
          editToolBar.addAction(copyAct);
          editToolBar.addAction(pasteAct);
      }
      
      /* Création de la barre de statut */
      private void createStatusBar()
      {
          statusBar().showMessage(tr("Pret"));
      }
      
      /* Lancement de l'application */
      public static void main(String[] args) {
            QApplication.initialize(args);
 
            JEditorDialog application = new JEditorDialog();
            application.show();
 
            QApplication.exec();
        }
}

Il n'y a rien de vraiment compliqué. En lançant l'application, vous pourrez essayer de déplacer les boîtes de dialogue. Il existe une fonction spéciale permettant de transformer la barre d'outils sous Mac OS X :

 
Sélectionnez
setUnifiedTitleAndToolBarOnMac(true);
Barre d'outils sur Mac OS X

III. Remerciements

Merci à Thibaut Cuvelier pour la mise en page et à Jacques Thery pour la relecture !

Qt en Java avec Qt Jambi
Du Qt en Java avec Qt Jambi
Utiliser Qt avec Java
Codons notre première fenêtre
Disposer les choses
Une boîte de dialogue
Une application avec des menus et des barres d'outils
Connecter les objets entre eux
Émettre un signal
JEditor, un simple éditeur de fichier texte
JViewer, un lecteur d'image
Image non disponible