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 !