diff options
Diffstat (limited to 'tests/manual/examples/widgets/tutorials/addressbook/part3')
5 files changed, 294 insertions, 0 deletions
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt new file mode 100644 index 0000000000..77d8d8a610 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt @@ -0,0 +1,37 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(part3 LANGUAGES CXX) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part3") + +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) + +qt_standard_project_setup() + +qt_add_executable(part3 + addressbook.cpp addressbook.h + main.cpp +) + +set_target_properties(part3 PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) + +target_link_libraries(part3 PRIVATE + Qt6::Core + Qt6::Gui + Qt6::Widgets +) + +install(TARGETS part3 + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp new file mode 100644 index 0000000000..1b37e56880 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp @@ -0,0 +1,182 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QtWidgets> +#include "addressbook.h" + +AddressBook::AddressBook(QWidget *parent) + : QWidget(parent) +{ + QLabel *nameLabel = new QLabel(tr("Name:")); + nameLine = new QLineEdit; + nameLine->setReadOnly(true); + + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; + addressText->setReadOnly(true); + + addButton = new QPushButton(tr("&Add")); + addButton->show(); + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); +//! [navigation pushbuttons] + nextButton = new QPushButton(tr("&Next")); + nextButton->setEnabled(false); + previousButton = new QPushButton(tr("&Previous")); + previousButton->setEnabled(false); +//! [navigation pushbuttons] + connect(addButton, &QPushButton::clicked, + this, &AddressBook::addContact); + connect(submitButton, &QPushButton::clicked, + this, &AddressBook::submitContact); + connect(cancelButton, &QPushButton::clicked, + this, &AddressBook::cancel); +//! [connecting navigation signals] + connect(nextButton, &QPushButton::clicked, + this, &AddressBook::next); + connect(previousButton, &QPushButton::clicked, + this, &AddressBook::previous); +//! [connecting navigation signals] + + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton, Qt::AlignTop); + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addStretch(); +//! [navigation layout] + QHBoxLayout *buttonLayout2 = new QHBoxLayout; + buttonLayout2->addWidget(previousButton); + buttonLayout2->addWidget(nextButton); +//! [ navigation layout] + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameLine, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); + mainLayout->addWidget(addressText, 1, 1); + mainLayout->addLayout(buttonLayout1, 1, 2); +//! [adding navigation layout] + mainLayout->addLayout(buttonLayout2, 2, 1); +//! [adding navigation layout] + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} + +void AddressBook::addContact() +{ + oldName = nameLine->text(); + oldAddress = addressText->toPlainText(); + + nameLine->clear(); + addressText->clear(); + + nameLine->setReadOnly(false); + nameLine->setFocus(Qt::OtherFocusReason); + addressText->setReadOnly(false); + + addButton->setEnabled(false); +//! [disabling navigation] + nextButton->setEnabled(false); + previousButton->setEnabled(false); +//! [disabling navigation] + submitButton->show(); + cancelButton->show(); +} + +void AddressBook::submitContact() +{ + QString name = nameLine->text(); + QString address = addressText->toPlainText(); + + if (name.isEmpty() || address.isEmpty()) { + QMessageBox::information(this, tr("Empty Field"), + tr("Please enter a name and address.")); + return; + } + + if (!contacts.contains(name)) { + contacts.insert(name, address); + QMessageBox::information(this, tr("Add Successful"), + tr("\"%1\" has been added to your address book.").arg(name)); + } else { + QMessageBox::information(this, tr("Add Unsuccessful"), + tr("Sorry, \"%1\" is already in your address book.").arg(name)); + } + + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + +//! [enabling navigation] + int number = contacts.size(); + nextButton->setEnabled(number > 1); + previousButton->setEnabled(number > 1); +//! [enabling navigation] + submitButton->hide(); + cancelButton->hide(); +} + +void AddressBook::cancel() +{ + nameLine->setText(oldName); + addressText->setText(oldAddress); + + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + + int number = contacts.size(); + nextButton->setEnabled(number > 1); + previousButton->setEnabled(number > 1); + + submitButton->hide(); + cancelButton->hide(); +} + +//! [next() function] +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() function] +//! [previous() function] +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() function] diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h new file mode 100644 index 0000000000..0e3aea1e05 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h @@ -0,0 +1,49 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#ifndef ADDRESSBOOK_H +#define ADDRESSBOOK_H + +#include <QWidget> +#include <QMap> + +QT_BEGIN_NAMESPACE +class QLabel; +class QLineEdit; +class QPushButton; +class QTextEdit; +QT_END_NAMESPACE + +class AddressBook : public QWidget +{ + Q_OBJECT + +public: + AddressBook(QWidget *parent = nullptr); + +public slots: + void addContact(); + void submitContact(); + void cancel(); +//! [navigation functions] + void next(); + void previous(); +//! [navigation functions] + +private: + QPushButton *addButton; + QPushButton *submitButton; + QPushButton *cancelButton; +//! [navigation pushbuttons] + QPushButton *nextButton; + QPushButton *previousButton; +//! [navigation pushbuttons] + QLineEdit *nameLine; + QTextEdit *addressText; + + QMap<QString, QString> contacts; + QString oldName; + QString oldAddress; +}; + +#endif diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp new file mode 100644 index 0000000000..1f3aac3397 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp @@ -0,0 +1,15 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QtWidgets> +#include "addressbook.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook addressBook; + addressBook.show(); + + return app.exec(); +} diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro b/tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro new file mode 100644 index 0000000000..3bacdd9501 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro @@ -0,0 +1,11 @@ +QT += widgets + +SOURCES = addressbook.cpp \ + main.cpp +HEADERS = addressbook.h + +QMAKE_PROJECT_NAME = ab_part3 + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part3 +INSTALLS += target |