I. L'objet QDialog▲
Voici ce que permettent les boîtes de dialogue :
- retourner une valeur (oui ou non, par exemple) ;
- contenir le QSizeGrip, le widget en bas à droite qui permet de redimentionner la fenêtre ;
- une boîte de dialogue ayant un parent (un objet l'ayant lancé) se retrouve affichée au centre de cet objet ;
- une boîte de dialogue peut émettre trois signaux (nous verrons ce que sont les signaux dans une partie spécifique) :
- accepted,
- rejected,
- finished.
Une boîte de dialogue est là pour une interaction brève avec l'utilisateur.
II. Une première boîte de dialogue ▲
Cette première boîte de dialogue permettra de corriger l'exercice précédent.
import
com.trolltech.qt.gui.*;
public
class
LoginBox extends
QWidget
{
/* Données dont un accès peut-être utile depuis le reste de la classe */
private
QLineEdit loginLineEdit;
private
QLineEdit passwordLineEdit;
private
QLineEdit serverLineEdit;
private
QLineEdit portLineEdit;
private
QCheckBox sslCheckBox;
private
QLineEdit ressourceLineEdit;
public
LoginBox
(
)
{
/** Login's GroupBox' **/
QGroupBox loginGroup =
new
QGroupBox
(
tr
(
"Login's informations:"
));
/* Login Line Edit with Label */
QLabel loginLabel =
new
QLabel
(
tr
(
"Jabber ID:"
));
loginLineEdit =
new
QLineEdit
(
);
loginLineEdit.setFocus
(
);
/* Password LineEdit with Label */
QLabel passwordLabel =
new
QLabel
(
tr
(
"Password:"
));
passwordLineEdit =
new
QLineEdit
(
);
passwordLineEdit.setEchoMode
(
QLineEdit.EchoMode.Password);
/* Login's Layout */
QGridLayout loginLayout =
new
QGridLayout
(
);
loginLayout.addWidget
(
loginLabel, 0
, 0
);
loginLayout.addWidget
(
loginLineEdit, 0
, 1
);
loginLayout.addWidget
(
passwordLabel, 1
, 0
);
loginLayout.addWidget
(
passwordLineEdit, 1
, 1
);
loginGroup.setLayout
(
loginLayout);
/** Account GroupBox **/
QGroupBox accountGroup =
new
QGroupBox
(
tr
(
"Server settings:"
));
/* Server Line Edit with Label */
QLabel serverLabel =
new
QLabel
(
tr
(
"Server:"
));
serverLineEdit =
new
QLineEdit
(
);
/* Port LineEdit with Label and SSL selection */
QLabel portLabel =
new
QLabel
(
tr
(
"Port:"
));
portLineEdit =
new
QLineEdit
(
"5222"
);
sslCheckBox =
new
QCheckBox
(
tr
(
"Using SSL"
));
/* Ressource Line Edit with Label */
QLabel ressourceLabel =
new
QLabel
(
tr
(
"Ressource:"
));
ressourceLineEdit =
new
QLineEdit
(
"jTalk"
);
/* Login's Layout */
QGridLayout accountLayout =
new
QGridLayout
(
);
accountLayout.addWidget
(
serverLabel, 0
, 0
);
accountLayout.addWidget
(
serverLineEdit, 0
, 1
, 1
, 2
);
accountLayout.addWidget
(
portLabel, 1
, 0
);
accountLayout.addWidget
(
portLineEdit, 1
, 1
);
accountLayout.addWidget
(
sslCheckBox, 1
, 2
);
accountLayout.addWidget
(
ressourceLabel, 2
, 0
);
accountLayout.addWidget
(
ressourceLineEdit, 2
, 1
, 1
, 2
);
accountGroup.setLayout
(
accountLayout);
/* Dialog Button Box */
QDialogButtonBox boutons =
new
QDialogButtonBox
(
);
boutons.addButton
(
QDialogButtonBox.StandardButton.Ok);
boutons.addButton
(
QDialogButtonBox.StandardButton.Cancel);
// Dialog Layout
QGridLayout layout =
new
QGridLayout
(
);
layout.addWidget
(
loginGroup, 0
, 0
);
layout.addWidget
(
accountGroup, 1
, 0
);
layout.addWidget
(
boutons, 2
, 0
);
setWindowTitle
(
tr
(
"Jabber Account Configuration"
));
setLayout
(
layout);
}
public
static
void
main
(
String args[])
{
QApplication.initialize
(
args);
LoginBox widget =
new
LoginBox
(
);
widget.show
(
);
QApplication.exec
(
);
}
}
On peut noter le setTitle(), permettant de donner un titre à la fenêtre. Notre fenêtre est redimensionnable.
III. Les boîtes de dialogues par défaut ▲
Il existe tout un tas de boîtes de dialogue qui retournent un QMessageBox.StandardButton, convertible implicitement en int. On les trouve comme attributs de QMessageBox.
QMessageBox.warning
(
null
, tr
(
"My Application"
),
tr
(
"The document has been modified.
\n
"
+
"Do you want to save your changes?"
),
new
QMessageBox.StandardButtons
(
QMessageBox.StandardButton.Save, QMessageBox.StandardButton.Discard, QMessageBox.StandardButton.Cancel));
Le fait d'ajouter le bouton Cancel vous permet d'utiliser Esc pour quitter la fenêtre. Si vous souhaitez en mettre un autre, il faut utiliser setEscapeButton(). Vous pouvez aussi utiliser setDefaultButton() pour utiliser la touche Entrée. En utilisant les boutons standards, on a l'avantage de ne pas s'en préoccuper.
De manière à coller avec les règles graphiques de chaque système, on se rend compte que je n'ai pas de titre dans ma message box et que l'icône qui devait être un warning est en fait celui du programme (ici, une console, car je lance java en console).
IV. Remerciements▲
Merci à Thibaut Cuvelier pour la mise en page et à Jacques Thery pour la relecture !