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

| Natim | dourouc05 |

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.

Commentez

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

- Auteurs : Natim, dourouc05

- Parution : 28 avril 2011

- Mise à jour : 12 juillet 2011

- Licence :

Sommaire

- I. L'objet QMainWindow

- I-A. La barre menu

- I-B. La barre d'outils

- I-C. Le dock

- I-D. Le widget central

- I-E. La barre de statut

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

- III. Remerciements

I - L'objet QMainWindow

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

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 :

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

/*
* 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 :

setUnifiedTitleAndToolBarOnMac(true);

III - Remerciements

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