IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Qt Jambi : une boîte de dialogue

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.

35 commentaires Donner une note à l´article (5)

Article lu   fois.

Les deux auteurs

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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.

 
Sélectionnez
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.

 
Sélectionnez
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.

Warning message box

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 !

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Image non disponible