![]() |
Home · Examples |
[Previous: Carnet d'adresses 3 - Naviguer entre les éléments][Tutoriel "Carnet d'adresses"][Next: Carnet d'adresse 5 - Ajouter une fonction de recherche]
Dans ce chapitre, nous verrons comment modifier les données des contacts contenus dans l'application carnet d'adresses.
Dans ce chapitre, on définit l'énumération Mode avec trois valeurs possibles.
enum Mode { NavigationMode, AddingMode, EditingMode };On ajoute également deux nouveaux slots, editContact() et removeContact(), à notre liste de slots publics.
void editContact(); void removeContact();Afin de basculer d'un mode à l'autre, on introduit la méthode updateInterface() pour contrôller l'activation et la désactivation de tous les objets QPushButton. On ajoute également deux nouveaux boutons, editButton et removeButton, pour les fonctions d'édition et de suppression mentionnées plus haut.Error parsing snippet.... QPushButton *editButton; QPushButton *removeButton; ... Mode currentMode; Enfin, on déclare currentMode pour garder une trace du mode actuellement utilisé.
editButton = new QPushButton(tr("&Edit")); editButton->setEnabled(false); removeButton = new QPushButton(tr("&Remove")); removeButton->setEnabled(false);Ces boutons sont ensuite connectés à leurs slots respectifs, editContact() et removeContact(), avant d'être ajoutés à buttonLayout1.
connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); ... buttonLayout1->addWidget(editButton); buttonLayout1->addWidget(removeButton);La methode editContact() place les anciens détails du contact dans oldName et oldAddress, avant de basculer vers le mode EditingMode. Dans ce mode, les boutons submitButton et cancelButton sont tous deux activés, l'utilisateur peut par conséquent modifier les détails du contact et cliquer sur l'un de ces deux boutons par la suite.Error parsing snippet. La méthode submitContact() a été divisée en deux avec un bloc if-else. On teste currentMode pour voir si le mode courant est AddingMode. Si c'est le cas, on procède à l'ajout.Error parsing snippet....Error parsing snippet. Sinon, on s'assure que currentMode est en EditingMode. Si c'est le cas, on compare oldName et name. Si le nom a changé, on supprime l'ancien contact de contacts et on insère le contact mis a jour.Error parsing snippet. Si seule l'adresse a changé (i.e. oldAddress n'est pas identique à address), on met à jour l'adresse du contact. Enfin on règle currentMode à NavigationMode. C'est une étape importante puisque c'est cela qui réactive tous les boutons désactivés.
Afin de retirer un contact du carnet d'adresses, on implémente la méthode removeContact(). Cette méthode vérifie que le contact est présent dans contacts.Error parsing snippet. Si c'est le cas, on affiche une boîte de dialogue QMessageBox, demandant confirmation de la suppression à l'utilisateur. Une fois la confirmation effectuée, on appelle previous(), afin de s'assurer que l'interface utilisateur affiche une autre entrée, et on supprime le contact en utilisant le méthode remove() de QMap. Dans un souci pratique, on informe l'utilisateur de la suppression par le biais d'une autre QMessageBox. Les deux boîtes de dialogue utilisées dans cette méthode sont représentées ci-dessous.
Chacun des boutons est ensuite activé ou désactivé, en fonction du mode. Le code source pour les cas AddingMode et EditingMode est visible ci- dessous:Error parsing snippet. Dans le cas de NavigationMode, en revanche, des tests conditionnels sont passés en paramètre de QPushButton::setEnabled(). Ceci permet de s'assurer que les boutons editButton et removeButton ne sont activés que s'il existe au moins un contact dans le carnet d'adresses; nextButton et previousButton ne sont activés que lorsqu'il existe plus d'un contact dans le carnet d'adresses.Error parsing snippet. En effectuant les opérations de réglage du mode et de mise à jour de l'interface utilisateur au sein de la même méthode, on est à l'abri de l'éventualité où l'interface utilisateur de "désynchronise" de l'état interne de l'application.
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Trademarks | Qt Jambi 4.5.2_01 |