Qt Jambi : une boîte de dialogue

| Natim | dourouc05 |

Maintenant qu'on sait disposer des objets dans des widgets, il faut finalement mettre ce widget dans une fenêtre pour l'afficher. Mais, jusque là, tout s'affichait très bien ? Oui, car votre gestionnaire de fenêtres, ne pouvant pas afficher un widget seul, créait une fenêtre pour que nous puissions afficher notre widget. Mais, si on veut changer le titre, par exemple, il faut une vraie fenêtre.

Commentez

- Titre : Qt Jambi : une boîte de dialogue

- Auteurs : Natim, dourouc05

- Parution : 28 avril 2011

- Mise à jour : 21 mai 2011

- Licence :

Sommaire

- I. L'objet QDialog

- II. Une première boîte de dialogue

- III. Les boîtes de dialogues par défaut

- IV. Remerciements

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 !