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 !





