Une boite de dialogue

Avatar de Monsieur X
Description du chapitre et des ses objectifs :

Maintenant qu'on sait disposer nos objets dans nos widgets, il faut finalement mettre ce widget dans une fenêtre pour pouvoir l'afficher.

Mais jusque là tout s'affichait très bien ? o_O
Oui car <lien type="wikipedia" url="Window_manager">votre gestionnaire de fenêtres</lien> ne pouvant pas afficher un widget seul nous créait une fenêtre pour que nous puissions afficher notre widget.
Mais si on veut changer le titre par exemple, il nous faut une vraie fenêtre.

Image de Partie

Accéder directement à une des parties du cours :

L'objet QDialog

Voici ce que permettent les boites de dialogue :

  • Notre boite de dialogue peut retourner une valeur (oui ou non par exemple)
  • Les boites de dialogues contiennent le QSizeGrip, le widget en bas à droite qui permet de redimentionner la fenêtre
  • L'affichage d'une boite de dialogue ayant un parent (un objet l'ayant lancé) se retrouve afficher au centre de cet objet.
  • Une boite de dialog peut émettre trois signaux (nous verrons ce que sont les signaux dans une partie à cet effet)
    • accepted
    • rejected
    • finished

Une boite de dialogue est là pour une interaction brève avec l'utilisateur.

Une première boite de dialogue

Cette première boite de dialogue me permettra de corriger l'exercice précédent.

Code java - Numéro de ligne
  1. import com.trolltech.qt.gui.*;
  2.  
  3. public class LoginBox extends QWidget
  4. {
  5.         /* Données dont un accès peut-être utile depuis le reste de la classe */
  6.     private QLineEdit loginLineEdit;
  7.     private QLineEdit passwordLineEdit;
  8.     private QLineEdit serverLineEdit;
  9.     private QLineEdit portLineEdit;
  10.     private QCheckBox sslCheckBox;
  11.     private QLineEdit ressourceLineEdit;
  12.    
  13.         public LoginBox()
  14.         {
  15.         /** Login's GroupBox' **/
  16.         QGroupBox loginGroup = new QGroupBox(tr("Login's informations:"));
  17.  
  18.         /* Login Line Edit with Label */
  19.         QLabel loginLabel = new QLabel(tr("Jabber ID:"));
  20.         loginLineEdit = new QLineEdit();
  21.         loginLineEdit.setFocus();
  22.        
  23.         /* Password LineEdit with Label */
  24.         QLabel passwordLabel = new QLabel(tr("Password:"));
  25.         passwordLineEdit = new QLineEdit();
  26.         passwordLineEdit.setEchoMode(QLineEdit.EchoMode.Password);
  27.        
  28.         /* Login's Layout */
  29.         QGridLayout loginLayout = new QGridLayout();
  30.         loginLayout.addWidget(loginLabel, 0, 0);
  31.         loginLayout.addWidget(loginLineEdit, 0, 1);
  32.         loginLayout.addWidget(passwordLabel, 1, 0);
  33.         loginLayout.addWidget(passwordLineEdit, 1, 1);
  34.         loginGroup.setLayout(loginLayout);
  35.        
  36.         /** Account GroupBox **/
  37.         QGroupBox accountGroup = new QGroupBox(tr("Server settings:"));
  38.  
  39.         /* Server Line Edit with Label */
  40.         QLabel serverLabel = new QLabel(tr("Server:"));
  41.         serverLineEdit = new QLineEdit();
  42.        
  43.         /* Port LineEdit with Label and SSL selection */
  44.         QLabel portLabel = new QLabel(tr("Port:"));
  45.         portLineEdit = new QLineEdit("5222");
  46.         sslCheckBox = new QCheckBox(tr("Using SSL"));
  47.        
  48.         /* Ressource Line Edit with Label */
  49.         QLabel ressourceLabel = new QLabel(tr("Ressource:"));
  50.         ressourceLineEdit = new QLineEdit("jTalk");
  51.        
  52.         /* Login's Layout */
  53.         QGridLayout accountLayout = new QGridLayout();
  54.         accountLayout.addWidget(serverLabel, 0, 0);
  55.         accountLayout.addWidget(serverLineEdit, 0, 1, 1, 2);
  56.         accountLayout.addWidget(portLabel, 1, 0);
  57.         accountLayout.addWidget(portLineEdit, 1, 1);
  58.         accountLayout.addWidget(sslCheckBox, 1, 2);
  59.         accountLayout.addWidget(ressourceLabel, 2, 0);
  60.         accountLayout.addWidget(ressourceLineEdit, 2, 1, 1, 2);
  61.         accountGroup.setLayout(accountLayout);
  62.        
  63.         /* Dialog Button Box */
  64.         QDialogButtonBox boutons = new QDialogButtonBox();
  65.                 boutons.addButton(QDialogButtonBox.StandardButton.Ok);
  66.                 boutons.addButton(QDialogButtonBox.StandardButton.Cancel);
  67.        
  68.         // Dialog Layout
  69.         QGridLayout layout = new QGridLayout();
  70.         layout.addWidget(loginGroup, 0, 0);
  71.         layout.addWidget(accountGroup, 1, 0);
  72.         layout.addWidget(boutons, 2, 0);
  73.         setLayout(layout);
  74.         setWindowTitle(tr("Jabber Account Configuration"));
  75.         setLayout(layout);
  76.         }
  77.        
  78.         public static void main(String args[])
  79.         {
  80.             QApplication.initialize(args);
  81.        
  82.             LoginBox widget = new LoginBox();
  83.             widget.show();
  84.        
  85.             QApplication.exec();
  86.         }
  87. }


On peut noter le setTitle() permettant de donner un titre à la fenêtre.
Notre fenêtre est redimensionnable.

Les boites de dialogues par défaut

Il existe tout un tas de boites de dialogue qui retournent un QMessageBox.StandardButton convertible implicitement en int.

On les trouve comme attributs de QMessageBox.

Code java - Numéro de ligne
  1. QMessageBox.warning(null, tr("My Application"),
  2.                          tr("The document has been modified.\n"+
  3.                          "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.

<image legende="Warning message box">uploads/fr/files/92001_93000/92191.png</image>

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)


Il est temps de passer à un peu de pratique ...

Chapitre précédent - Sommaire - Chapitre suivant

Nos rédacteurs et membres sont pour la plupart ouverts à des remarques constructives et servir à alerter le rédacteur du cours, des fautes éventuelles ou de propositions et nouvelles perspectives de cours etc ...
Pour ce faire cliquez ici

Postez vous aussi un commentaire à cette partie via le lien que voici