Remove the "classwizard" example
It adds nothing new to what the trivial and license wizard examples show, other than a bunch of somewhat messy and outdated code to generate C++ code files based on the input. The example is referenced in a few parts of the documentation, but there are equivalent snippets in the trivial and license wizard examples, so point at those instead, and add some relevant API usage where needed. Pick-to: 6.5 Change-Id: If1ff57e775bad28920d9e019aeccae69d1f4d127 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
@ -121,7 +121,6 @@ manifestmeta.ios.names = "QtCore/Contiguous Cache Example" \
|
||||
"QtWidgets/Easing Curves Example" \
|
||||
"QtWidgets/Move Blocks Example" \
|
||||
"QtWidgets/States Example" \
|
||||
"QtWidgets/Class Wizard Example" \
|
||||
"QtWidgets/Find Files Example" \
|
||||
"QtWidgets/License Wizard Example" \
|
||||
"QtWidgets/Standard Dialogs Example" \
|
||||
|
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 8.2 KiB |
@ -2,11 +2,10 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
if(QT_FEATURE_wizard)
|
||||
qt_internal_add_example(classwizard)
|
||||
qt_internal_add_example(trivialwizard)
|
||||
if(Qt6::PrintSupport)
|
||||
qt_internal_add_example(licensewizard)
|
||||
endif()
|
||||
endif()
|
||||
qt_internal_add_example(standarddialogs)
|
||||
qt_internal_add_example(tabdialog)
|
||||
if(QT_FEATURE_wizard AND TARGET Qt6::PrintSupport)
|
||||
qt_internal_add_example(licensewizard)
|
||||
endif()
|
||||
|
@ -1,8 +1,7 @@
|
||||
QT_FOR_CONFIG += widgets
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = classwizard \
|
||||
licensewizard \
|
||||
SUBDIRS = licensewizard \
|
||||
standarddialogs \
|
||||
tabdialog \
|
||||
trivialwizard
|
||||
|
@ -288,9 +288,12 @@ void ConclusionPage::initializePage()
|
||||
"You can use this software for 30 days and make one "
|
||||
"backup, but you are not allowed to distribute it.");
|
||||
} else if (wizard()->hasVisitedPage(LicenseWizard::Page_Details)) {
|
||||
//! [accessField]
|
||||
const QString emailAddress = field("details.email").toString();
|
||||
licenseText = tr("<u>First-Time License Agreement:</u> "
|
||||
"You can use this software subject to the license "
|
||||
"you will receive by email.");
|
||||
"you will receive by email sent to %1.").arg(emailAddress);
|
||||
//! [accessField]
|
||||
} else {
|
||||
licenseText = tr("<u>Upgrade License Agreement:</u> "
|
||||
"This software is licensed under the terms of your "
|
||||
|
@ -86,10 +86,12 @@ int main(int argc, char *argv[])
|
||||
app.installTranslator(translator);
|
||||
#endif
|
||||
|
||||
//! [linearAddPage]
|
||||
QWizard wizard;
|
||||
wizard.addPage(createIntroPage());
|
||||
wizard.addPage(createRegistrationPage());
|
||||
wizard.addPage(createConclusionPage());
|
||||
//! [linearAddPage]
|
||||
|
||||
wizard.setWindowTitle("Trivial Wizard");
|
||||
wizard.show();
|
||||
|
@ -1,167 +0,0 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||
|
||||
/*!
|
||||
\example dialogs/classwizard
|
||||
\title Class Wizard Example
|
||||
\ingroup examples-dialogs
|
||||
|
||||
\brief The Class Wizard example shows how to implement linear
|
||||
wizards using QWizard.
|
||||
|
||||
\image classwizard.png Screenshot of the Class Wizard example
|
||||
|
||||
Most wizards have a linear structure, with page 1 followed by
|
||||
page 2 and so on until the last page. Some wizards are more
|
||||
complex in that they allow different traversal paths based on the
|
||||
information provided by the user. The
|
||||
\l{dialogs/licensewizard}{License Wizard} example shows how to
|
||||
create such wizards.
|
||||
|
||||
The Class Wizard example consists of the following classes:
|
||||
|
||||
\list
|
||||
\li \c ClassWizard inherits QWizard and provides a
|
||||
three-step wizard that generates the skeleton of a C++ class
|
||||
based on the user's input.
|
||||
\li \c IntroPage, \c ClassInfoPage, \c CodeStylePage, \c
|
||||
OutputFilesPage, and \c ConclusionPage are QWizardPage
|
||||
subclasses that implement the wizard pages.
|
||||
\endlist
|
||||
|
||||
\section1 ClassWizard Class Definition
|
||||
|
||||
\image classwizard-flow.png The Class Wizard pages
|
||||
|
||||
We will see how to subclass QWizard to implement our own wizard.
|
||||
The concrete wizard class is called \c ClassWizard and provides
|
||||
five pages:
|
||||
|
||||
\list
|
||||
\li The first page is an introduction page, telling the user what
|
||||
the wizard is going to do.
|
||||
\li The second page asks for a class name and a base class, and
|
||||
allows the user to specify whether the class should have a \c
|
||||
Q_OBJECT macro and what constructors it should provide.
|
||||
\li The third page allows the user to set some options related to the code
|
||||
style, such as the macro used to protect the header file from
|
||||
multiple inclusion (e.g., \c MYDIALOG_H).
|
||||
\li The fourth page allows the user to specify the names of the
|
||||
output files.
|
||||
\li The fifth page is a conclusion page.
|
||||
\endlist
|
||||
|
||||
Although the program is just an example, if you press \uicontrol Finish
|
||||
(\uicontrol Done on \macos), actual C++ source files will actually be
|
||||
generated.
|
||||
|
||||
\section1 The ClassWizard Class
|
||||
|
||||
Here's the \c ClassWizard definition:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.h 0
|
||||
|
||||
The class reimplements QDialog's \l{QDialog::}{accept()} slot.
|
||||
This slot is called when the user clicks \uicontrol{Finish}.
|
||||
|
||||
Here's the constructor:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 1
|
||||
|
||||
We instantiate the five pages and insert them into the wizard
|
||||
using QWizard::addPage(). The order in which they are inserted
|
||||
is also the order in which they will be shown later on.
|
||||
|
||||
We call QWizard::setPixmap() to set the banner and the
|
||||
background pixmaps for all pages. The banner is used as a
|
||||
background for the page header when the wizard's style is
|
||||
\l{QWizard::}{ModernStyle}; the background is used as the
|
||||
dialog's background in \l{QWizard::}{MacStyle}. (See \l{Elements
|
||||
of a Wizard Page} for more information.)
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 3
|
||||
\snippet dialogs/classwizard/classwizard.cpp 4
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 5
|
||||
\snippet dialogs/classwizard/classwizard.cpp 6
|
||||
|
||||
If the user clicks \uicontrol Finish, we extract the information from
|
||||
the various pages using QWizard::field() and generate the files.
|
||||
The code is long and tedious (and has barely anything to do with
|
||||
noble art of designing wizards), so most of it is skipped here.
|
||||
See the actual example in the Qt distribution for the details if
|
||||
you're curious.
|
||||
|
||||
\section1 The IntroPage Class
|
||||
|
||||
The pages are defined in \c classwizard.h and implemented in \c
|
||||
classwizard.cpp, together with \c ClassWizard. We will start with
|
||||
the easiest page:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.h 1
|
||||
\codeline
|
||||
\snippet dialogs/classwizard/classwizard.cpp 7
|
||||
|
||||
A page inherits from QWizardPage. We set a
|
||||
\l{QWizardPage::}{title} and a
|
||||
\l{QWizard::WatermarkPixmap}{watermark pixmap}. By not setting
|
||||
any \l{QWizardPage::}{subTitle}, we ensure that no header is
|
||||
displayed for this page. (On Windows, it is customary for wizards
|
||||
to display a watermark pixmap on the first and last pages, and to
|
||||
have a header on the other pages.)
|
||||
|
||||
Then we create a QLabel and add it to a layout.
|
||||
|
||||
\section1 The ClassInfoPage Class
|
||||
|
||||
The second page is defined and implemented as follows:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.h 2
|
||||
\codeline
|
||||
\snippet dialogs/classwizard/classwizard.cpp 9
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 12
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 13
|
||||
|
||||
First, we set the page's \l{QWizardPage::}{title},
|
||||
\l{QWizardPage::}{subTitle}, and \l{QWizard::LogoPixmap}{logo
|
||||
pixmap}. The logo pixmap is displayed in the page's header in
|
||||
\l{QWizard::}{ClassicStyle} and \l{QWizard::}{ModernStyle}.
|
||||
|
||||
Then we create the child widgets, create \l{Registering and Using
|
||||
Fields}{wizard fields} associated with them, and put them into
|
||||
layouts. The \c className field is created with an asterisk (\c
|
||||
*) next to its name. This makes it a \l{mandatory fields}{mandatory field}, that
|
||||
is, a field that must be filled before the user can press the
|
||||
\uicontrol Next button (\uicontrol Continue on \macos). The fields' values
|
||||
can be accessed from any other page using QWizardPage::field(),
|
||||
or from the wizard code using QWizard::field().
|
||||
|
||||
\section1 The CodeStylePage Class
|
||||
|
||||
The third page is defined and implemented as follows:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.h 3
|
||||
\codeline
|
||||
\snippet dialogs/classwizard/classwizard.cpp 14
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 15
|
||||
\codeline
|
||||
\snippet dialogs/classwizard/classwizard.cpp 16
|
||||
|
||||
The code in the constructor is very similar to what we did for \c
|
||||
ClassInfoPage, so we skipped most of it.
|
||||
|
||||
The \c initializePage() function is what makes this class
|
||||
interesting. It is reimplemented from QWizardPage and is used to
|
||||
initialize some of the page's fields with values from the
|
||||
previous page (namely, \c className and \c baseClass). For
|
||||
example, if the class name on page 2 is \c SuperDuperWidget, the
|
||||
default macro name on page 3 is \c SUPERDUPERWIDGET_H.
|
||||
|
||||
The \c OutputFilesPage and \c ConclusionPage classes are very
|
||||
similar to \c CodeStylePage, so we won't review them here.
|
||||
|
||||
\sa QWizard, {License Wizard Example}, {Trivial Wizard Example}
|
||||
*/
|
@ -13,7 +13,7 @@
|
||||
|
||||
Most wizards have a linear structure, with page 1 followed by
|
||||
page 2 and so on until the last page. The
|
||||
\l{dialogs/classwizard}{Class Wizard} example shows how to create
|
||||
\l{dialogs/trivialwizard}{Trivial Wizard} example shows how to create
|
||||
such wizards.
|
||||
|
||||
Some wizards are more complex in that they allow different
|
||||
@ -191,5 +191,5 @@
|
||||
option and disconnect the \c printButtonClicked() slot.
|
||||
\endlist
|
||||
|
||||
\sa QWizard, {Class Wizard Example}, {Trivial Wizard Example}
|
||||
\sa QWizard, {Trivial Wizard Example}
|
||||
*/
|
||||
|
@ -55,5 +55,5 @@
|
||||
|
||||
\snippet dialogs/trivialwizard/trivialwizard.cpp 10
|
||||
|
||||
\sa QWizard, {Class Wizard Example}, {License Wizard Example}
|
||||
\sa QWizard, {License Wizard Example}
|
||||
*/
|
||||
|
@ -1761,9 +1761,8 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
|
||||
\section1 A Trivial Example
|
||||
|
||||
The following example illustrates how to create wizard pages and
|
||||
add them to a wizard. For more advanced examples, see
|
||||
\l{dialogs/classwizard}{Class Wizard} and \l{dialogs/licensewizard}{License
|
||||
Wizard}.
|
||||
add them to a wizard. For more advanced examples, see the
|
||||
\l{dialogs/licensewizard}{License Wizard}.
|
||||
|
||||
\snippet dialogs/trivialwizard/trivialwizard.cpp 1
|
||||
\snippet dialogs/trivialwizard/trivialwizard.cpp 3
|
||||
@ -1892,12 +1891,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
|
||||
To register a field, call QWizardPage::registerField() field.
|
||||
For example:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 8
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 10
|
||||
\snippet dialogs/classwizard/classwizard.cpp 11
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 13
|
||||
\snippet dialogs/licensewizard/licensewizard.cpp 21
|
||||
|
||||
The above code registers three fields, \c className, \c
|
||||
baseClass, and \c qobjectMacro, which are associated with three
|
||||
@ -1908,11 +1902,11 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
|
||||
The fields of any page are accessible from any other page. For
|
||||
example:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 17
|
||||
\snippet dialogs/licensewizard/licensewizard.cpp 27
|
||||
|
||||
Here, we call QWizardPage::field() to access the contents of the
|
||||
\c className field (which was defined in the \c ClassInfoPage)
|
||||
and use it to initialize the \c OutputFilePage. The field's
|
||||
\c details.email field (which was defined in the \c DetailsPage)
|
||||
and use it to initialize the \c ConclusionPage. The field's
|
||||
contents is returned as a QVariant.
|
||||
|
||||
When we create a field using QWizardPage::registerField(), we
|
||||
@ -1955,15 +1949,13 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
|
||||
\section1 Creating Linear Wizards
|
||||
|
||||
Most wizards have a linear structure, with page 1 followed by
|
||||
page 2 and so on until the last page. The \l{dialogs/classwizard}{Class
|
||||
Wizard} example is such a wizard. With QWizard, linear wizards
|
||||
page 2 and so on until the last page. The \l{dialogs/trivialwizard}
|
||||
{Trivial Wizard} example is such a wizard. With QWizard, linear wizards
|
||||
are created by instantiating the \l{QWizardPage}s and inserting
|
||||
them using addPage(). By default, the pages are shown in the
|
||||
order in which they were added. For example:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 0
|
||||
\dots
|
||||
\snippet dialogs/classwizard/classwizard.cpp 2
|
||||
\snippet dialogs/trivialwizard/trivialwizard.cpp linearAddPage
|
||||
|
||||
When a page is about to be shown, QWizard calls initializePage()
|
||||
(which in turn calls QWizardPage::initializePage()) to fill the
|
||||
@ -2033,7 +2025,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
|
||||
|
||||
\snippet dialogs/licensewizard/licensewizard.cpp 27
|
||||
|
||||
\sa QWizardPage, {Class Wizard Example}, {License Wizard Example}
|
||||
\sa QWizardPage, {Trivial Wizard Example}, {License Wizard Example}
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -3407,7 +3399,7 @@ int QWizard::nextId() const
|
||||
using registerField() and can be accessed at any time using
|
||||
field() and setField().
|
||||
|
||||
\sa QWizard, {Class Wizard Example}, {License Wizard Example}
|
||||
\sa QWizard, {Trivial Wizard Example}, {License Wizard Example}
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -3550,7 +3542,7 @@ QPixmap QWizardPage::pixmap(QWizard::WizardPixmap which) const
|
||||
fields are properly initialized based on fields from previous
|
||||
pages. For example:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 17
|
||||
\snippet dialogs/licensewizard/licensewizard.cpp 27
|
||||
|
||||
The default implementation does nothing.
|
||||
|
||||
@ -3854,7 +3846,7 @@ void QWizardPage::setField(const QString &name, const QVariant &value)
|
||||
|
||||
Example:
|
||||
|
||||
\snippet dialogs/classwizard/classwizard.cpp 17
|
||||
\snippet dialogs/licensewizard/licensewizard.cpp accessField
|
||||
|
||||
\sa QWizard::field(), setField(), registerField()
|
||||
*/
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |