diff options
Diffstat (limited to 'tests/manual/examples/widgets/tutorials/addressbook/part2')
5 files changed, 235 insertions, 0 deletions
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part2/CMakeLists.txt new file mode 100644 index 0000000000..0231e7bce8 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/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(part2 LANGUAGES CXX) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part2") + +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) + +qt_standard_project_setup() + +qt_add_executable(part2 + addressbook.cpp addressbook.h + main.cpp +) + +set_target_properties(part2 PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) + +target_link_libraries(part2 PRIVATE + Qt6::Core + Qt6::Gui + Qt6::Widgets +) + +install(TARGETS part2 + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp new file mode 100644 index 0000000000..085103c791 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp @@ -0,0 +1,123 @@ +// 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; +//! [setting readonly 1] + nameLine->setReadOnly(true); +//! [setting readonly 1] + QLabel *addressLabel = new QLabel(tr("Address:")); + addressText = new QTextEdit; +//! [setting readonly 2] + addressText->setReadOnly(true); +//! [setting readonly 2] + +//! [pushbutton declaration] + addButton = new QPushButton(tr("&Add")); + addButton->show(); + submitButton = new QPushButton(tr("&Submit")); + submitButton->hide(); + cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->hide(); +//! [pushbutton declaration] +//! [connecting signals and slots] + connect(addButton, &QPushButton::clicked, + this, &AddressBook::addContact); + connect(submitButton, &QPushButton::clicked, + this, &AddressBook::submitContact); + connect(cancelButton, &QPushButton::clicked, + this, &AddressBook::cancel); +//! [connecting signals and slots] +//! [vertical layout] + QVBoxLayout *buttonLayout1 = new QVBoxLayout; + buttonLayout1->addWidget(addButton, Qt::AlignTop); + buttonLayout1->addWidget(submitButton); + buttonLayout1->addWidget(cancelButton); + buttonLayout1->addStretch(); +//! [vertical layout] +//! [grid 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); +//! [grid layout] + setLayout(mainLayout); + setWindowTitle(tr("Simple Address Book")); +} +//! [addContact] +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); + submitButton->show(); + cancelButton->show(); +} +//! [addContact] + +//! [submitContact part1] +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; + } +//! [submitContact part1] +//! [submitContact part2] + 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)); + return; + } +//! [submitContact part2] +//! [submitContact part3] + if (contacts.isEmpty()) { + nameLine->clear(); + addressText->clear(); + } + + nameLine->setReadOnly(true); + addressText->setReadOnly(true); + addButton->setEnabled(true); + submitButton->hide(); + cancelButton->hide(); +} +//! [submitContact part3] +//! [cancel] +void AddressBook::cancel() +{ + nameLine->setText(oldName); + nameLine->setReadOnly(true); + + addressText->setText(oldAddress); + addressText->setReadOnly(true); + + addButton->setEnabled(true); + submitButton->hide(); + cancelButton->hide(); +} +//! [cancel] diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h new file mode 100644 index 0000000000..ecc1a71cee --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h @@ -0,0 +1,47 @@ +// 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); + +//! [slots] +public slots: + void addContact(); + void submitContact(); + void cancel(); +//! [slots] + +//! [pushbutton declaration] +private: + QPushButton *addButton; + QPushButton *submitButton; + QPushButton *cancelButton; + QLineEdit *nameLine; + QTextEdit *addressText; +//! [pushbutton declaration] + +//! [remaining private variables] + QMap<QString, QString> contacts; + QString oldName; + QString oldAddress; +}; +//! [remaining private variables] + +#endif diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp new file mode 100644 index 0000000000..879fb606a2 --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp @@ -0,0 +1,17 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QtWidgets> +#include "addressbook.h" + +//! [main function] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + AddressBook addressBook; + addressBook.show(); + + return app.exec(); +} +//! [main function] diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro b/tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro new file mode 100644 index 0000000000..643ffcfebd --- /dev/null +++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro @@ -0,0 +1,11 @@ +QT += widgets + +SOURCES = addressbook.cpp \ + main.cpp +HEADERS = addressbook.h + +QMAKE_PROJECT_NAME = ab_part2 + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part2 +INSTALLS += target |