Convert "extension" dialog example into snippets

Pick-to: 6.5
Task-number: QTBUG-108751
Change-Id: I8ca4e058b832674dc0c8b84024cb70a667ee8db4
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
This commit is contained in:
Volker Hilsheimer 2023-05-16 14:17:35 +02:00
parent cb2ff3b733
commit 11da92ba94
13 changed files with 37 additions and 129 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@ -5,7 +5,6 @@ if(QT_FEATURE_wizard)
qt_internal_add_example(classwizard) qt_internal_add_example(classwizard)
qt_internal_add_example(trivialwizard) qt_internal_add_example(trivialwizard)
endif() endif()
qt_internal_add_example(extension)
qt_internal_add_example(standarddialogs) qt_internal_add_example(standarddialogs)
qt_internal_add_example(tabdialog) qt_internal_add_example(tabdialog)
if(QT_FEATURE_wizard AND TARGET Qt6::PrintSupport) if(QT_FEATURE_wizard AND TARGET Qt6::PrintSupport)

View File

@ -2,7 +2,6 @@ QT_FOR_CONFIG += widgets
TEMPLATE = subdirs TEMPLATE = subdirs
SUBDIRS = classwizard \ SUBDIRS = classwizard \
extension \
licensewizard \ licensewizard \
standarddialogs \ standarddialogs \
tabdialog \ tabdialog \

View File

@ -1,121 +0,0 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example dialogs/extension
\title Extension Example
\ingroup examples-dialogs
\brief The Extension example shows how to add an extension to a QDialog
using the QAbstractButton::toggled() signal and the
QWidget::setVisible() slot.
\image extension-example.png Screenshot of the Extension example
The Extension application lets the user add search parameters in
a dialog and launch a simple or advanced search.
The simple search has two options: \uicontrol {Match case} and \uicontrol
{Search from start}. The advanced search offers search for \uicontrol {Whole words},
\uicontrol {Search backward}, and \uicontrol {Search selection}. The
application starts with simple search as the default. Click the \uicontrol More button
to show the advanced search options:
\image extension_more.png Screenshot of the Extension example
\section1 FindDialog Class Definition
The \c FindDialog class inherits QDialog. QDialog is the
base class for dialog windows. A dialog window is a top-level
window mostly used for short-term tasks and brief communications
with the user.
\snippet dialogs/extension/finddialog.h 0
The \c FindDialog widget is the main application widget, and
displays the application's search options and controlling
buttons.
In addition to the constructor, there are several child widgets:
\list
\li A QLineEdit with an associated QLabel to let the
user type a word to search for.
\li Several \l {QCheckBox}{QCheckBox}es to facilitate the search options.
\li Three \l {QPushButton}{QPushButton}s:
\list
\li the \uicontrol Find button to start a search
\li the \uicontrol More button to enable an advanced search
\li a QWidget representing the application's extension part
\endlist
\endlist
\section1 FindDialog Class Implementation
Create the standard child widgets for the simple search in the constructor:
the QLineEdit with the associated QLabel, two {QCheckBox}es and all the
\l {QPushButton}{QPushButton}s.
\snippet dialogs/extension/finddialog.cpp 0
This snippet illustrates how you can define a shortcut key
for a widget. A shortcut should be defined by putting the ampersand
character (\c &) in front of the letter that should
become the shortcut.
For example, for \uicontrol {Find what}, pressing \uicontrol Alt
and \uicontrol w transfers focus to the QLineEdit widget.
Shortcuts can also be used for checking on or off a checkmark.
For example, pressing \uicontrol Alt and \uicontrol c puts the check mark
on \uicontrol {Match Case} if it was unchecked and vice versa.
It is the QLabel::setBuddy() method that links a widget to the shortcut
character if it has been defined.
Set the \uicontrol Find button's default property to true, using the
QPushButton::setDefault() function. Then the push button will be
pressed if the user presses the Enter (or Return) key. Note that a
QDialog can only have one default button.
\snippet dialogs/extension/finddialog.cpp 2
Create the extension widget, and the \l {QCheckBox}{QCheckBox}es associated
with the advanced search options.
\snippet dialogs/extension/finddialog.cpp 3
Now that the extension widget is created, connect the \uicontrol
More button's \l{QAbstractButton::toggled()}{toggled()} signal to
the extension widget's \l{QWidget::setVisible()}{setVisible()} slot.
The QAbstractButton::toggled() signal is emitted whenever a
checkable button changes its state. The signal's argument is true
if the button is checked, or false if the button is unchecked. The
QWidget::setVisible() slot sets the widget's visible status. If
the status is true the widget is shown, otherwise the widget is
hidden.
Since the \uicontrol More button is checkable, the connection makes
sure that the extension widget is shown depending on the state of
the \uicontrol More button.
Create checkboxes associated with the advanced search options in
a layout installed on the extension widget.
\snippet dialogs/extension/finddialog.cpp 4
Before creating the main layout, create several child layouts
for the widgets. First align the QLabel and its buddy, the
QLineEdit, using a QHBoxLayout. Then align the QLabel and the QLineEdit
vertically with the checkboxes associated with the simple search,
using a QVBoxLayout. Create also a QVBoxLayout for the buttons.
Finally, lay out the two latter layouts and the extension widget
using a QGridLayout.
\snippet dialogs/extension/finddialog.cpp 5
Hide the extension widget using the QWidget::hide()
function, making the application only show the simple search
options when it starts. When the user wants to access the advanced
search options, the dialog only needs to change the visibility of
the extension widget. Qt's layout management takes care of the
dialog's appearance.
*/

View File

@ -299,7 +299,8 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const
\section1 Escape Key \section1 Escape Key
If the user presses the Esc key in a dialog, QDialog::reject() If the user presses the Esc key in a dialog, QDialog::reject()
will be called. This will cause the window to close: The \l{QCloseEvent}{close event} cannot be \l{QEvent::ignore()}{ignored}. will be called. This will cause the window to close:
The \l{QCloseEvent}{close event} cannot be \l{QEvent::ignore()}{ignored}.
\section1 Extensibility \section1 Extensibility
@ -307,9 +308,8 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const
partial dialog that shows the most commonly used options, and a partial dialog that shows the most commonly used options, and a
full dialog that shows all the options. Typically an extensible full dialog that shows all the options. Typically an extensible
dialog will initially appear as a partial dialog, but with a dialog will initially appear as a partial dialog, but with a
\uicontrol More toggle button. If the user presses the \uicontrol More button down, \uicontrol More toggle button. If the user presses the
the dialog is expanded. The \l{Extension Example} shows how to achieve \uicontrol More button down, the dialog is expanded.
extensible dialogs using Qt.
\target return \target return
\section1 Return Value (Modal Dialogs) \section1 Return Value (Modal Dialogs)
@ -339,7 +339,11 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const
\snippet dialogs/dialogs.cpp 0 \snippet dialogs/dialogs.cpp 0
\sa QDialogButtonBox, QTabWidget, QWidget, QProgressDialog, {Extension Example}, A dialog with an extension:
\snippet dialogs/dialogs.cpp extension
\sa QDialogButtonBox, QTabWidget, QWidget, QProgressDialog,
{Standard Dialogs Example} {Standard Dialogs Example}
*/ */

View File

@ -227,6 +227,33 @@ void Operation::cancel()
} }
//! [6] //! [6]
void extension()
{
using ExtendedControls = QWidget;
QPushButton *findButton;
QPushButton *moreButton;
QWidget *extension;
QVBoxLayout *mainLayout;
//! [extension]
findButton = new QPushButton(tr("&Find"));
moreButton = new QPushButton(tr("&More..."));
moreButton->setCheckable(true);
extension = new ExtendedControls;
mainLayout->addWidget(extension);
extension->hide();
connect(moreButton, &QAbstractButton::toggled, extension, &QWidget::setVisible);
//! [extension]
//! [buttonbox]
QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Vertical);
buttonBox->addButton(findButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(moreButton, QDialogButtonBox::ActionRole);
//! [buttonbox]
}
int main() int main()
{ {
} }

View File

@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE
the buttons (or button texts) yourself and add them to the button box, the buttons (or button texts) yourself and add them to the button box,
specifying their role. specifying their role.
\snippet dialogs/extension/finddialog.cpp 1 \snippet dialogs/dialogs.cpp buttonbox
Alternatively, QDialogButtonBox provides several standard buttons (e.g. OK, Cancel, Save) Alternatively, QDialogButtonBox provides several standard buttons (e.g. OK, Cancel, Save)
that you can use. They exist as flags so you can OR them together in the constructor. that you can use. They exist as flags so you can OR them together in the constructor.