![]() |
Home · Examples |
[Previous: Carnet d'adresses 2 - Ajouter des adresses][Tutoriel "Carnet d'adresses"][Next: Carnet d'Adresses 4 - Éditer et supprimer des adresses]
L'application "Carnet d'adresses" est maintenant à moitié terminée. Il nous faut maintenant ajouter quelques fonctions pour naviguer entre les contacts. Avant de commencer, il faut se décider sur le type de structure de données le plus approprié pour stocker les contacts.
Dans le chapitre 2, nous avons utilisé un QMap utilisant des paires clé-valeur, avec le nom du contact comme clé, et l'adresse du contact comme valeur. Cela fonctionnait bien jusqu'ici, mais pour ajouter la navigation entre les entrées, quelques améliorations sont nécessaires.
Nous améliorerons le QMap en le faisant ressembler à une structure de données similaire à une liste liée, où tous les éléments sont connectés, y compris le premier et le dernier élément. La figure ci-dessous illustre cette structure de donnée.
void next(); void previous();Nous avons aussi besoin de deux nouveaux objets QPushButton, nous ajoutons donc les variables privées nextButton et previousButton.
QPushButton *nextButton; QPushButton *previousButton;
nextButton = new QPushButton(tr("&Next")); nextButton->setEnabled(false); previousButton = new QPushButton(tr("&Previous")); previousButton->setEnabled(false);Nous connectons alors ces boutons à leur slots respectifs:
connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); connect(previousButton, SIGNAL(clicked()), this, SLOT(previous()));L'image ci-dessous montre l'interface utilisateur que nous allons créer. Remarquez que cela ressemble de plus en plus à l'interface du programme complet.
QHBoxLayout *buttonLayout2 = new QHBoxLayout; buttonLayout2->addWidget(previousButton); buttonLayout2->addWidget(nextButton);L'objet QHBoxLayout, buttonLayout2, est ensuite ajouté à mainLayout.
mainLayout->addLayout(buttonLayout2, 3, 1);La figure ci-dessous montre les systèmes de coordonnées pour les widgets du mainLayout.
nextButton->setEnabled(false); previousButton->setEnabled(false);Dans notre fonction submitContact(), nous activons les boutons de navigation, nextButton et previousButton, en fonction de la taille de contacts. Comme mentionné plus tôt, la navigation n'est activée que si il y a plus d'un contact dans le carnet d'adresses. Les lignes suivantes montrent comment faire cela:
int number = contacts.size(); nextButton->setEnabled(number > 1); previousButton->setEnabled(number > 1);Nous incluons aussi ces lignes de code dans le bouton cancel().
Souvenez vous que nous voulons émuler une liste-liée ciruculaire à l'aide de l'objet QMap, contacts. Pour faire cela, nous obtenons un itérateur sur contact dans la fonction next(), et ensuite:
De la même façon, pour la fonction previous(), nous obtenons un itérateur sur contacts et ensuite:
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Trademarks | Qt Jambi 4.5.2_01 |