![]() |
Home · Examples |
[Previous: Address Book 3 - Navigating between Entries][Address Book Tutorial][Next: Address Book 5 - Adding a Find Function]
In this chapter, we look at ways to modify the contents of contact stored in the address book application.
In this chapter, we define the Mode enum with three different values:
enum Mode { NavigationMode, AddingMode, EditingMode };We also add two new slots, editContact() and removeContact(), to our current list of public slots.
void editContact(); void removeContact();In order to switch between modes, we introduce the updateInterface() function to control the enabling and disabling of all QPushButton objects. We also add two new push buttons, editButton and removeButton, for the edit and remove functions mentioned earlier.Error parsing snippet.... QPushButton *editButton; QPushButton *removeButton; ... Mode currentMode; Lastly, we declare currentMode to keep track of the current mode of the enum.
editButton = new QPushButton(tr("&Edit")); editButton->setEnabled(false); removeButton = new QPushButton(tr("&Remove")); removeButton->setEnabled(false);These buttons are then connected to their respective slots, editContact() and removeContact(), and we add them to buttonLayout1.
connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); ... buttonLayout1->addWidget(editButton); buttonLayout1->addWidget(removeButton);The editContact() function stores the contact's old details in oldName and oldAddress, before switching the mode to EditingMode. In this mode, the submitButton and cancelButton are both enabled, hence, the user can change the contact's details and click either button.Error parsing snippet. The submitContact() function has been divided in two with an if-else statement. We check currentMode to see if its in AddingMode. If it is, we proceed with our adding process.Error parsing snippet....Error parsing snippet. Otherwise, we check to see if currentMode is in EditingMode. If it is, we compare oldName with name. If the name has changed, we remove the old contact from contacts and insert the newly updated contact.Error parsing snippet. If only the address has changed (i.e., oldAddress is not the same as address), we update the contact's address. Lastly, we set currentMode to NavigationMode. This is an important step as it re-enables all the disabled push buttons.
To remove a contact from the address book, we implement the removeContact() function. This function checks to see if the contact exists in contacts.Error parsing snippet. If it does, we display a QMessageBox, to confirm the removal with the user. Once the user has confirmed, we call previous() to ensure that the user interface shows another contact, and we remove the contact using QMap's remove() function. As a courtesy, we display a QMessageBox to inform the user. Both the message boxes used in this function are shown below:
Each of the push buttons is then enabled or disabled, depending on the current mode. The code for AddingMode and EditingMode is shown below:Error parsing snippet. For NavigationMode, however, we include conditions within the parameters of the QPushButton::setEnabled(). This is to ensure that the editButton and removeButton push buttons are enabled when there is at least one contact in the address book; nextButton and previousButton are only enabled when there is more than one contact in the address book.Error parsing snippet. By performing the task of setting the mode and updating the user interface in the same function, we avoid the possibility of the user interface getting "out of sync" with the internal state of the application.
Copyright © 2008 Trolltech | Trademarks | Qt Jambi 4.4.2_01 |