diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc index f20e1ae5641904815226f34a836f43dfc4ebcb06..ec9c46e6e96fa69f1703de36fe5b7b5836565665 100644 --- a/doc/addressbook-sdk.qdoc +++ b/doc/addressbook-sdk.qdoc @@ -451,18 +451,42 @@ So far, our application allows us to add new contacts. However, we also need to traverse the existing contacts. To do so, we add two push buttons at the bottom of our application and name them: \gui Next and - \gui Previous. Place them in a horizontal layout. + \gui Previous. The buttons' \c objectName should be \c nextButton and + \c previousButton, respectively. Then, we break our top level layout. + Simply right-click on \c AddressBook in the \gui{Object Inspector} and + then select \gui{Lay out|Break Layout}. Place the \gui Next and + \gui Previous buttons in a horizontal layout. Now drag and drop the buttons + together with their layout into the existing grid layout. The screenshot + below illustrates what you will see as the button layout approaches the + grid layout; drop it then. + + \image addressbook-tutorial-part3-drop-into-gridlayout + + Finally, set a top level layout for the widget again. - To lay the buttons out, we begin by breaking our top level layout. Simply - right-click on \c AddressBook in the \gui{Object Inspector} and then select - \gui{Lay out|Break Layout} Then we drag two push buttons onto the form and - name them accordingly. The buttons' \c objectName should be \c nextButton - and \c previousButton, respectively. \section1 The AddressBook Class - In order to add navigation functions to the address book application, we - need to add two more slots to our \c AddressBook class: \c next() and - \c previous(). + Let's move on to the code. In order to add navigation functions to the + address book application, we need to add two more slots to our + \c AddressBook class: \c next() and \c previous(). + + \snippet examples/addressbook-sdk/part3/addressbook.h slot definition + + We also define two more QPushButton objects: + + \snippet examples/addressbook-sdk/part3/addressbook.h members + + To implement these slots, we begin by extracting the push buttons from + the form: + + \snippet examples/addressbook-sdk/part3/addressbook.cpp extract objects + + Next, we make the necessary signal-slot connections. + + \snippet examples/addressbook-sdk/part3/addressbook.cpp signal slot + + + */ diff --git a/doc/examples/addressbook-sdk/part3/addressbook.cpp b/doc/examples/addressbook-sdk/part3/addressbook.cpp index 6c68e40d32cf2140cf0ab49c4e66b6e804645801..5eddb82198f7de1557272d086f2cc495c3fe8ac3 100644 --- a/doc/examples/addressbook-sdk/part3/addressbook.cpp +++ b/doc/examples/addressbook-sdk/part3/addressbook.cpp @@ -6,7 +6,6 @@ AddressBook::AddressBook(QWidget *parent) { ui->setupUi(this); - //! [extract objects] nameLine = new QLineEdit; nameLine = ui->nameLine; nameLine->setReadOnly(true); @@ -25,20 +24,29 @@ AddressBook::AddressBook(QWidget *parent) cancelButton = new QPushButton; cancelButton = ui->cancelButton; cancelButton->hide(); - //! [extract objects] - //! [signal slot] +//! [extract objects] + nextButton = new QPushButton; + nextButton = ui->nextButton; + + previousButton = new QPushButton; + previousButton = ui->previousButton; +//! [extract objects] + connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); - //! [signal slot] +//! [signal slot] + connect(nextButton, SIGNAL(clicked()), this, + SLOT(next())); + connect(previousButton, SIGNAL(clicked()), this, + SLOT(previous())); +//! [signal slot] - //! [window title] setWindowTitle(tr("Simple Address Book")); - //! [window title] } AddressBook::~AddressBook() @@ -46,7 +54,6 @@ AddressBook::~AddressBook() delete ui; } -//! [addContact] void AddressBook::addContact() { oldName = nameLine->text(); @@ -63,9 +70,7 @@ void AddressBook::addContact() submitButton->show(); cancelButton->show(); } -//! [addContact] -//! [submitContact part1] void AddressBook::submitContact() { QString name = nameLine->text(); @@ -76,9 +81,7 @@ void AddressBook::submitContact() tr("Please enter a name and address.")); return; } -//! [submitContact part1] -//! [submitContact part2] if (!contacts.contains(name)) { contacts.insert(name, address); QMessageBox::information(this, tr("Add Successful"), @@ -89,9 +92,7 @@ void AddressBook::submitContact() tr("Sorry, \"%1\" is already in your address book.").arg(name)); return; } -//! [submitContact part2] -//! [submitContact part3] if (contacts.isEmpty()) { nameLine->clear(); addressText->clear(); @@ -103,9 +104,7 @@ void AddressBook::submitContact() submitButton->hide(); cancelButton->hide(); } -//! [submitContact part3] -//! [cancel] void AddressBook::cancel() { nameLine->setText(oldName); @@ -118,4 +117,41 @@ void AddressBook::cancel() submitButton->hide(); cancelButton->hide(); } -//! [cancel] + +//! [next] +void AddressBook::next() +{ + QString name = nameLine->text(); + QMap<QString, QString>::iterator i = contacts.find(name); + + if (i != contacts.end()) + i++; + if (i == contacts.end()) + i = contacts.begin(); + + nameLine->setText(i.key()); + addressText->setText(i.value()); +} +//! [next] + +//! [previous] +void AddressBook::previous() +{ + QString name = nameLine->text(); + QMap<QString, QString>::iterator i = contacts.find(name); + + if (i == contacts.end()) { + nameLine->clear(); + addressText->clear(); + return; + } + + if (i == contacts.begin()) + i = contacts.end(); + + i--; + nameLine->setText(i.key()); + addressText->setText(i.value()); +} +//! [previous] + diff --git a/doc/examples/addressbook-sdk/part3/addressbook.h b/doc/examples/addressbook-sdk/part3/addressbook.h index efea5d177b3d2f359fb0278441c7a4e373f56b25..dd18d85512e32bd4b294795834a5dfd4b0afc62c 100644 --- a/doc/examples/addressbook-sdk/part3/addressbook.h +++ b/doc/examples/addressbook-sdk/part3/addressbook.h @@ -22,29 +22,31 @@ public: AddressBook(QWidget *parent = 0); ~AddressBook(); -//! [slot definition] public slots: void addContact(); void submitContact(); void cancel(); //! [slot definition] + void next(); + void previous(); +//! [slot definition] private: Ui::AddressBook *ui; -//! [members1] QPushButton *addButton; QPushButton *submitButton; QPushButton *cancelButton; +//! [members] + QPushButton *nextButton; + QPushButton *previousButton; +//! [members] QLineEdit *nameLine; QTextEdit *addressText; -//! [members1] -//! [members2] QMap<QString, QString> contacts; QString oldName; QString oldAddress; -//! [members2] }; #endif // ADDRESSBOOK_H diff --git a/doc/examples/addressbook-sdk/part3/addressbook.ui b/doc/examples/addressbook-sdk/part3/addressbook.ui index 8ce9c52c01c37c459fb45e20e1f78f7f1f370e69..6e313d6bbfbd75ef5043b9d9f226b70173266601 100644 --- a/doc/examples/addressbook-sdk/part3/addressbook.ui +++ b/doc/examples/addressbook-sdk/part3/addressbook.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>600</width> - <height>294</height> + <width>498</width> + <height>333</height> </rect> </property> <property name="windowTitle"> @@ -16,8 +16,8 @@ <widget class="QWidget" name="layoutWidget"> <property name="geometry"> <rect> - <x>9</x> - <y>9</y> + <x>48</x> + <y>28</y> <width>413</width> <height>225</height> </rect> @@ -84,6 +84,24 @@ </item> </layout> </item> + <item row="2" column="1"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="nextButton"> + <property name="text"> + <string>Next</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="previousButton"> + <property name="text"> + <string>Previous</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> </widget>