diff options
Diffstat (limited to 'examples/widgets/dialogs/standarddialogs')
-rw-r--r-- | examples/widgets/dialogs/standarddialogs/CMakeLists.txt | 44 | ||||
-rw-r--r-- | examples/widgets/dialogs/standarddialogs/dialog.cpp | 140 | ||||
-rw-r--r-- | examples/widgets/dialogs/standarddialogs/dialog.h | 52 | ||||
-rw-r--r-- | examples/widgets/dialogs/standarddialogs/main.cpp | 68 | ||||
-rw-r--r-- | examples/widgets/dialogs/standarddialogs/main.mm | 47 |
5 files changed, 134 insertions, 217 deletions
diff --git a/examples/widgets/dialogs/standarddialogs/CMakeLists.txt b/examples/widgets/dialogs/standarddialogs/CMakeLists.txt index b42e3a81c7..07e22469ee 100644 --- a/examples/widgets/dialogs/standarddialogs/CMakeLists.txt +++ b/examples/widgets/dialogs/standarddialogs/CMakeLists.txt @@ -1,40 +1,38 @@ -# Generated from standarddialogs.pro. +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.16) project(standarddialogs LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/dialogs/standarddialogs") - -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) +qt_standard_project_setup() qt_add_executable(standarddialogs dialog.cpp dialog.h main.cpp ) + set_target_properties(standarddialogs PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) -target_link_libraries(standarddialogs PUBLIC - Qt::Core - Qt::Gui - Qt::Widgets + +target_link_libraries(standarddialogs PRIVATE + Qt6::Core + Qt6::Gui + Qt6::Widgets ) install(TARGETS standarddialogs - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +qt_generate_deploy_app_script( + TARGET standarddialogs + OUTPUT_SCRIPT deploy_script + NO_UNSUPPORTED_PLATFORM_ERROR ) +install(SCRIPT ${deploy_script}) diff --git a/examples/widgets/dialogs/standarddialogs/dialog.cpp b/examples/widgets/dialogs/standarddialogs/dialog.cpp index cd7e8085a2..67fb615794 100644 --- a/examples/widgets/dialogs/standarddialogs/dialog.cpp +++ b/examples/widgets/dialogs/standarddialogs/dialog.cpp @@ -1,67 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include <QtWidgets> #include "dialog.h" -#define MESSAGE \ - Dialog::tr("<p>Message boxes have a caption, a text, " \ - "and any number of buttons, each with standard or custom texts." \ - "<p>Click a button to close the message box. Pressing the Esc button " \ - "will activate the detected escape button (if any).") -#define MESSAGE_DETAILS \ - Dialog::tr("If a message box has detailed text, the user can reveal it " \ - "by pressing the Show Details... button.") - - class DialogOptionsWidget : public QGroupBox { public: @@ -99,7 +42,7 @@ void DialogOptionsWidget::addSpacer() int DialogOptionsWidget::value() const { int result = 0; - for (const CheckBoxEntry &checkboxEntry : qAsConst(checkBoxEntries)) { + for (const CheckBoxEntry &checkboxEntry : std::as_const(checkBoxEntries)) { if (checkboxEntry.first->isChecked()) result |= checkboxEntry.second; } @@ -195,8 +138,6 @@ Dialog::Dialog(QWidget *parent) warningLabel->setFrameStyle(frameStyle); QPushButton *warningButton = new QPushButton(tr("QMessageBox::&warning()")); - errorLabel = new QLabel; - errorLabel->setFrameStyle(frameStyle); QPushButton *errorButton = new QPushButton(tr("QErrorMessage::showM&essage()")); @@ -250,6 +191,7 @@ Dialog::Dialog(QWidget *parent) colorDialogOptionsWidget->addCheckBox(doNotUseNativeDialog, QColorDialog::DontUseNativeDialog); colorDialogOptionsWidget->addCheckBox(tr("Show alpha channel") , QColorDialog::ShowAlphaChannel); colorDialogOptionsWidget->addCheckBox(tr("No buttons") , QColorDialog::NoButtons); + colorDialogOptionsWidget->addCheckBox(tr("Hide Color Picker") , QColorDialog::NoEyeDropperButton); layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding), 1, 0); layout->addWidget(colorDialogOptionsWidget, 2, 0, 1 ,2); @@ -306,7 +248,6 @@ Dialog::Dialog(QWidget *parent) layout->addWidget(warningButton, 3, 0); layout->addWidget(warningLabel, 3, 1); layout->addWidget(errorButton, 4, 0); - layout->addWidget(errorLabel, 4, 1); layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding), 5, 0); toolbox->addItem(page, tr("Message Boxes")); @@ -388,8 +329,14 @@ void Dialog::setColor() void Dialog::setFont() { const QFontDialog::FontDialogOptions options = QFlag(fontDialogOptionsWidget->value()); + + const QString &description = fontLabel->text(); + QFont defaultFont; + if (!description.isEmpty()) + defaultFont.fromString(description); + bool ok; - QFont font = QFontDialog::getFont(&ok, QFont(fontLabel->text()), this, "Select Font", options); + QFont font = QFontDialog::getFont(&ok, defaultFont, this, "Select Font", options); if (ok) { fontLabel->setText(font.key()); fontLabel->setFont(font); @@ -454,10 +401,14 @@ void Dialog::setSaveFileName() void Dialog::criticalMessage() { - QMessageBox::StandardButton reply; - reply = QMessageBox::critical(this, tr("QMessageBox::critical()"), - MESSAGE, - QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore); + QMessageBox msgBox(QMessageBox::Critical, tr("QMessageBox::critical()"), + tr("Houston, we have a problem"), { }, this); + msgBox.setInformativeText(tr("Activating the liquid oxygen stirring fans caused an explosion in one of the tanks. " \ + "Liquid oxygen levels are getting low. This may jeopardize the moon landing mission.")); + msgBox.addButton(QMessageBox::Abort); + msgBox.addButton(QMessageBox::Retry); + msgBox.addButton(QMessageBox::Ignore); + int reply = msgBox.exec(); if (reply == QMessageBox::Abort) criticalLabel->setText(tr("Abort")); else if (reply == QMessageBox::Retry) @@ -468,9 +419,12 @@ void Dialog::criticalMessage() void Dialog::informationMessage() { - QMessageBox::StandardButton reply; - reply = QMessageBox::information(this, tr("QMessageBox::information()"), MESSAGE); - if (reply == QMessageBox::Ok) + QMessageBox msgBox(QMessageBox::Information, tr("QMessageBox::information()"), + tr("Elvis has left the building."), { }, this); + msgBox.setInformativeText(tr("This phrase was often used by public address announcers at the conclusion " \ + "of Elvis Presley concerts in order to disperse audiences who lingered in " \ + "hopes of an encore. It has since become a catchphrase and punchline.")); + if (msgBox.exec() == QMessageBox::Ok) informationLabel->setText(tr("OK")); else informationLabel->setText(tr("Escape")); @@ -478,10 +432,15 @@ void Dialog::informationMessage() void Dialog::questionMessage() { - QMessageBox::StandardButton reply; - reply = QMessageBox::question(this, tr("QMessageBox::question()"), - MESSAGE, - QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); + QMessageBox msgBox(QMessageBox::Question, tr("QMessageBox::question()"), + tr("Would you like cheese with that?"), { }, this); + msgBox.setInformativeText(tr("A cheeseburger is a hamburger topped with cheese. Traditionally, the slice of " \ + "cheese is placed on top of the meat patty. The cheese is usually added to the " \ + "cooking hamburger patty shortly before serving, which allows the cheese to melt.")); + msgBox.addButton(QMessageBox::Yes); + msgBox.addButton(QMessageBox::No); + msgBox.addButton(QMessageBox::Cancel); + int reply = msgBox.exec(); if (reply == QMessageBox::Yes) questionLabel->setText(tr("Yes")); else if (reply == QMessageBox::No) @@ -493,26 +452,31 @@ void Dialog::questionMessage() void Dialog::warningMessage() { QMessageBox msgBox(QMessageBox::Warning, tr("QMessageBox::warning()"), - MESSAGE, { }, this); - msgBox.setDetailedText(MESSAGE_DETAILS); - msgBox.addButton(tr("Save &Again"), QMessageBox::AcceptRole); - msgBox.addButton(tr("&Continue"), QMessageBox::RejectRole); - if (msgBox.exec() == QMessageBox::AcceptRole) - warningLabel->setText(tr("Save Again")); + tr("Delete the only copy of your movie manuscript?"), { }, this); + msgBox.setInformativeText(tr("You've been working on this manuscript for 738 days now. Hang in there!")); + msgBox.setDetailedText("\"A long time ago in a galaxy far, far away....\""); + auto *keepButton = msgBox.addButton(tr("&Keep"), QMessageBox::AcceptRole); + auto *deleteButton = msgBox.addButton(tr("Delete"), QMessageBox::DestructiveRole); + msgBox.exec(); + if (msgBox.clickedButton() == keepButton) + warningLabel->setText(tr("Keep")); + else if (msgBox.clickedButton() == deleteButton) + warningLabel->setText(tr("Delete")); else - warningLabel->setText(tr("Continue")); - + warningLabel->setText(""); } void Dialog::errorMessage() { errorMessageDialog->showMessage( tr("This dialog shows and remembers error messages. " - "If the checkbox is checked (as it is by default), " - "the shown message will be shown again, " - "but if the user unchecks the box the message " + "If the user chooses to not show the dialog again, the dialog " "will not appear again if QErrorMessage::showMessage() " "is called with the same message.")); - errorLabel->setText(tr("If the box is unchecked, the message " - "won't appear again.")); + errorMessageDialog->showMessage( + tr("You can queue up error messages, and they will be " + "shown one after each other. Each message maintains " + "its own state for whether it will be shown again " + "the next time QErrorMessage::showMessage() is called " + "with the same message.")); } diff --git a/examples/widgets/dialogs/standarddialogs/dialog.h b/examples/widgets/dialogs/standarddialogs/dialog.h index 6d9cbdc07a..88d0f7519f 100644 --- a/examples/widgets/dialogs/standarddialogs/dialog.h +++ b/examples/widgets/dialogs/standarddialogs/dialog.h @@ -1,52 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef DIALOG_H #define DIALOG_H @@ -102,7 +55,6 @@ private: QLabel *informationLabel; QLabel *questionLabel; QLabel *warningLabel; - QLabel *errorLabel; QErrorMessage *errorMessageDialog; DialogOptionsWidget *fileDialogOptionsWidget; DialogOptionsWidget *colorDialogOptionsWidget; diff --git a/examples/widgets/dialogs/standarddialogs/main.cpp b/examples/widgets/dialogs/standarddialogs/main.cpp index 3892c02f9d..c982ef36c5 100644 --- a/examples/widgets/dialogs/standarddialogs/main.cpp +++ b/examples/widgets/dialogs/standarddialogs/main.cpp @@ -1,52 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include <QApplication> #include <QScreen> @@ -57,19 +10,22 @@ #include "dialog.h" +using namespace Qt::StringLiterals; + int main(int argc, char *argv[]) { QApplication app(argc, argv); - QGuiApplication::setApplicationDisplayName(Dialog::tr("Standard Dialogs")); -#ifndef QT_NO_TRANSLATION - QString translatorFileName = QLatin1String("qtbase_"); - translatorFileName += QLocale::system().name(); - QTranslator *translator = new QTranslator(&app); - if (translator->load(translatorFileName, QLibraryInfo::path(QLibraryInfo::TranslationsPath))) - app.installTranslator(translator); +#if QT_CONFIG(translation) + QTranslator translator; + if (translator.load(QLocale::system(), u"qtbase"_s, u"_"_s, + QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { + app.installTranslator(&translator); + } #endif + QGuiApplication::setApplicationDisplayName(Dialog::tr("Standard Dialogs")); + Dialog dialog; if (!QGuiApplication::styleHints()->showIsFullScreen() && !QGuiApplication::styleHints()->showIsMaximized()) { const QRect availableGeometry = dialog.screen()->availableGeometry(); diff --git a/examples/widgets/dialogs/standarddialogs/main.mm b/examples/widgets/dialogs/standarddialogs/main.mm new file mode 100644 index 0000000000..558ef4e680 --- /dev/null +++ b/examples/widgets/dialogs/standarddialogs/main.mm @@ -0,0 +1,47 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QApplication> +#include <QScreen> +#include <QStyleHints> +#include <QTranslator> +#include <QLocale> +#include <QLibraryInfo> + +#include "dialog.h" + +#include <AppKit/AppKit.h> + +using namespace Qt::StringLiterals; + +int main(int argc, char *argv[]) +{ + [NSApplication sharedApplication]; + NSApplicationLoad(); + NSApplicationLoad(); + [NSApp run]; + + QApplication app(argc, argv); + //app.setAttribute(Qt::AA_DontUseNativeDialogs); + +#if QT_CONFIG(translation) + QTranslator translator; + if (translator.load(QLocale::system(), u"qtbase"_s, u"_"_s, + QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { + app.installTranslator(&translator); + } +#endif + + QGuiApplication::setApplicationDisplayName(Dialog::tr("Standard Dialogs")); + + Dialog dialog; + if (!QGuiApplication::styleHints()->showIsFullScreen() && !QGuiApplication::styleHints()->showIsMaximized()) { + const QRect availableGeometry = dialog.screen()->availableGeometry(); + dialog.resize(availableGeometry.width() / 3, availableGeometry.height() * 2 / 3); + dialog.move((availableGeometry.width() - dialog.width()) / 2, + (availableGeometry.height() - dialog.height()) / 2); + } + dialog.show(); + + return app.exec(); +} |