Une application avec des menus et des toolbars

Avatar de Monsieur X
Description du chapitre et des ses objectifs :

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

Image de Partie

Accéder directement à une des parties du cours :

L'objet QMainWindow

La structure d'une fenêtre QMainWindow se compose comme ceci :

<image legende="Structure de QMainWindow">uploads/fr/files/92001_93000/92229.png</image>


La barre de menu



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

Les barres d'outils



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

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

Le Widget central



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

La barre de Status



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

Une première fenêtre d'application

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

<image legende="JEditor version GTK">uploads/fr/files/92001_93000/92230.png</image>


Pour ce code vous aurez besoin du pack d'image.

Code java - Numéro de ligne
  1. /*
  2.  * JEditorDialog.java
  3.  * Version de JEditor sans les signaux
  4.  *
  5.  * Created on 2 novembre 2007
  6.  * Modified on 17 novembre 2007
  7.  */
  8.  
  9. /* Import des classes espace de nomage nécessaires */
  10. import com.trolltech.qt.QVariant;
  11.  
  12. /* Importation des éléments du GUI */
  13. import com.trolltech.qt.gui.QApplication;
  14. import com.trolltech.qt.gui.QMainWindow;
  15. import com.trolltech.qt.gui.QTextEdit;
  16. import com.trolltech.qt.gui.QMenu;
  17. import com.trolltech.qt.gui.QToolBar;
  18. import com.trolltech.qt.gui.QAction;
  19. import com.trolltech.qt.gui.QMenuBar;
  20. import com.trolltech.qt.gui.QFileDialog;
  21. import com.trolltech.qt.gui.QCloseEvent;
  22. import com.trolltech.qt.gui.QMessageBox;
  23. import com.trolltech.qt.gui.QIcon;
  24. import com.trolltech.qt.gui.QKeySequence;
  25. import com.trolltech.qt.gui.QCursor;
  26.  
  27. /* Définition de l'application et de ses attributs */
  28. public class JEditorDialog extends QMainWindow {
  29.     private String curFile;         // Fichier actuellement ouvert
  30.     private QTextEdit textEdit;     // Widget permettant l'affichage et la modification du texte
  31.     private QMenu fileMenu;         // Menu Fichier
  32.     private QMenu editMenu;         // Menu Edition
  33.     private QMenu helpMenu;         // Menu Aide
  34.     private QToolBar fileToolBar;   // Barre d'outil Fichier
  35.     private QToolBar editToolBar;   // Barre d'outil Edition
  36.     private QAction newAct;         // Action Nouveau
  37.     private QAction openAct;        // Action Ouvrir
  38.     private QAction saveAct;        // Action Enregistrer
  39.     private QAction saveAsAct;      // Action Enregistrer Sous
  40.     private QAction exitAct;        // Action Quitter
  41.     private QAction cutAct;         // Action Couper
  42.     private QAction copyAct;        // Action Copier
  43.     private QAction pasteAct;       // Action Coller
  44.     private QAction aboutAct;       // Action A Propos de JEditor
  45.     private QAction aboutQtAct;     // Action A propos de Qt Jambi
  46.     private String rsrcPath = "classpath:images"; // Répertoire des images
  47.    
  48.     /* Définition du constructeur */
  49.     public JEditorDialog()
  50.     {
  51.         QMenuBar menuBar = new QMenuBar();                // On crée la barre de menu
  52.         textEdit = new QTextEdit(this);
  53.         setMenuBar(menuBar);                              // On ajoute la barre de menu à notre Application
  54.         setCentralWidget(textEdit);                       // On ajoute la zone de Texte
  55.         /* On lance les méthodes de création des différents attributs de notre fenêtre */
  56.         createActions();
  57.         createMenus();
  58.         createToolBars();
  59.         createStatusBar();
  60.         setUnifiedTitleAndToolBarOnMac(true);
  61.       }
  62.      
  63.       /* Création des actions des menus et des toolbars */
  64.       private void createActions()
  65.       {
  66.           /* Actions du menu Fichier */
  67.           newAct = new QAction(new QIcon(rsrcPath + "/new.png"), tr("&amp;Nouveau"), this);
  68.           newAct.setShortcut(new QKeySequence(tr("Ctrl+N")));
  69.           newAct.setStatusTip(tr("Nouveau fichier"));
  70.  
  71.           openAct = new QAction(new QIcon(rsrcPath + "/open.png"), tr("&amp;Ouvrir..."), this);
  72.           openAct.setShortcut(tr("Ctrl+O"));
  73.           openAct.setStatusTip(tr("Ouvrir un fichier"));
  74.  
  75.           saveAct = new QAction(new QIcon(rsrcPath + "/save.png"), tr("&amp;Enregistrer..."), this);
  76.           saveAct.setShortcut(tr("Ctrl+S"));
  77.           saveAct.setStatusTip(tr("Enregistrer le fichier"));
  78.  
  79.           saveAsAct = new QAction(new QIcon(rsrcPath + "/save_as.png"), tr("Enregistrer Sous..."), this);
  80.           saveAsAct.setStatusTip(tr("Enregistrer le fichier sous ..."));
  81.  
  82.           exitAct = new QAction(tr("Quitter"), this);
  83.           exitAct.setStatusTip(tr("Quitter l'application"));
  84.  
  85.           /* Actions du Menu Edition */
  86.           cutAct = new QAction(new QIcon(rsrcPath + "/cut.png"), tr("Cou&amp;per"), this);
  87.           cutAct.setShortcut(new QKeySequence(tr("Ctrl+X")));
  88.           cutAct.setStatusTip(tr("Couper la séléction"));
  89.  
  90.           copyAct = new QAction(new QIcon(rsrcPath + "/copy.png"), tr("&amp;Copier..."), this);
  91.           copyAct.setShortcut(tr("Ctrl+C"));
  92.           copyAct.setStatusTip(tr("Copier la séléction"));
  93.  
  94.           pasteAct = new QAction(new QIcon(rsrcPath + "/paste.png"), tr("Co&amp;ller..."), this);
  95.           pasteAct.setShortcut(tr("Ctrl+V"));
  96.           pasteAct.setStatusTip(tr("Coller le texte précédement couper ou copier"));
  97.          
  98.           /* Action du menu Aide */
  99.           aboutAct = new QAction(new QIcon(rsrcPath + "/about.png"), tr("A Propos de &amp;JEditor"), this);
  100.           aboutAct.setStatusTip(tr("A Propos de JEditor"));
  101.          
  102.           aboutQtAct = new QAction(new QIcon(rsrcPath + "/qt.png"), tr("A Propos de &amp;Qt"), this);
  103.           aboutQtAct.setStatusTip(tr("Show the Qt library's About box"));
  104.          
  105.           cutAct.setEnabled(false);
  106.           copyAct.setEnabled(false);
  107.       }
  108.      
  109.       /* Création des Menus */
  110.       private void createMenus()
  111.       {
  112.           /* Menu fichier */
  113.           fileMenu = menuBar().addMenu(tr("&amp;Fichier"));
  114.           fileMenu.addAction(newAct);
  115.           fileMenu.addAction(openAct);
  116.           fileMenu.addAction(saveAct);
  117.           fileMenu.addAction(saveAsAct);
  118.           fileMenu.addSeparator();
  119.           fileMenu.addAction(exitAct);
  120.  
  121.           /* Menu Edition */
  122.           editMenu = menuBar().addMenu(tr("&amp;Edition"));
  123.           editMenu.addAction(cutAct);
  124.           editMenu.addAction(copyAct);
  125.           editMenu.addAction(pasteAct);
  126.  
  127.           menuBar().addSeparator();
  128.  
  129.           /* Menu Aide */
  130.           helpMenu = menuBar().addMenu(tr("&amp;Aide"));
  131.           helpMenu.addAction(aboutAct);
  132.           helpMenu.addAction(aboutQtAct);
  133.       }
  134.      
  135.       /* Création de la barre de menu */
  136.       private void createToolBars()
  137.       {
  138.           fileToolBar = addToolBar(tr("Fichier"));
  139.           fileToolBar.addAction(newAct);
  140.           fileToolBar.addAction(openAct);
  141.           fileToolBar.addAction(saveAct);
  142.  
  143.           editToolBar = addToolBar(tr("Edition"));
  144.           editToolBar.addAction(cutAct);
  145.           editToolBar.addAction(copyAct);
  146.           editToolBar.addAction(pasteAct);
  147.       }
  148.      
  149.       /* Création de la Barre de Status */
  150.       private void createStatusBar()
  151.       {
  152.           statusBar().showMessage(tr("Pret"));
  153.       }
  154.      
  155.       /* Lancement de l'application */
  156.       public static void main(String[] args) {
  157.             QApplication.initialize(args);
  158.  
  159.             JEditorDialog application = new JEditorDialog();
  160.             application.show();
  161.  
  162.             QApplication.exec();
  163.         }
  164. }


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

Code java - Numéro de ligne
  1. setUnifiedTitleAndToolBarOnMac(true);


<image legende="ToolBar sur Mac OS">uploads/fr/files/92001_93000/92234.png</image>


...

Chapitre précédent - Sommaire

Nos rédacteurs et membres sont pour la plupart ouverts à des remarques constructives et servir à alerter le rédacteur du cours, des fautes éventuelles ou de propositions et nouvelles perspectives de cours etc ...
Pour ce faire cliquez ici

Postez vous aussi un commentaire à cette partie via le lien que voici