Класс QWizard
Класс QWizard предоставляет основу для создания мастеров. Подробнее...
| Заголовок: | #include <QWizard> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследуется от: | QDialog |
Типы
| перечисление | КнопкаМастера { КнопкаНазад, КнопкаВперед, КнопкаПодтвердить, КнопкаЗавершить, КнопкаОтмена, …, Расширение } |
| перечисление | ОпцияМастера { НезависимыеСтраницы, ИгнорироватьПодзаголовки, РасширенныйWatermarkPixmap, НетКнопкиПоУмолчанию, НетКнопкиНазадНаПервойСтранице, …, НетКнопкиОтменыНаПоследнейСтранице } |
| флаги | ОпцииМастера |
| перечисление | ИзображениеМастера { WatermarkPixmap, LogoPixmap, BannerPixmap, BackgroundPixmap } |
| перечисление | СтильМастера { КлассическийСтиль, СовременныйСтиль, СтильMac, СтильAero } |
Свойства
|
Открытые функции
| QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
| virtual | ~QWizard() |
| int | addPage(QWizardPage *page) |
| QAbstractButton * | button(QWizard::WizardButton which) const |
| QString | buttonText(QWizard::WizardButton which) const |
| int | currentId() const |
| QWizardPage * | currentPage() const |
| QVariant | field(const QString &name) const |
| bool | hasVisitedPage(int id) const |
| virtual int | nextId() const |
| QWizard::WizardOptions | options() const |
| QWizardPage * | page(int id) const |
| QList<int> | pageIds() const |
| QPixmap | pixmap(QWizard::WizardPixmap which) const |
| void | removePage(int id) |
| void | setButton(QWizard::WizardButton which, QAbstractButton *button) |
| void | setButtonLayout(const QList<QWizard::WizardButton> &layout) |
| void | setButtonText(QWizard::WizardButton which, const QString &text) |
| void | setDefaultProperty(const char *className, const char *property, const char *changedSignal) |
| void | setField(const QString &name, const QVariant &value) |
| void | setOption(QWizard::WizardOption option, bool on = true) |
| void | setOptions(QWizard::WizardOptions options) |
| void | setPage(int id, QWizardPage *page) |
| void | setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap) |
| void | setSideWidget(QWidget *widget) |
| void | setStartId(int id) |
| void | setSubTitleFormat(Qt::TextFormat format) |
| void | setTitleFormat(Qt::TextFormat format) |
| void | setWizardStyle(QWizard::WizardStyle style) |
| QWidget * | sideWidget() const |
| int | startId() const |
| Qt::TextFormat | subTitleFormat() const |
| bool | testOption(QWizard::WizardOption option) const |
| Qt::TextFormat | titleFormat() const |
| virtual bool | validateCurrentPage() |
| QList<int> | visitedIds() const |
| QWizard::WizardStyle | wizardStyle() const |
Переопределённые открытые функции
| virtual void | setVisible(bool visible) override |
| virtual QSize | sizeHint() const override |
Открытые слоты
| void | back() |
| void | next() |
| void | restart() |
Сигналы
| void | currentIdChanged(int id) |
| void | customButtonClicked(int which) |
| void | helpRequested() |
| void | pageAdded(int id) |
| void | pageRemoved(int id) |
Protected Functions
| virtual void | cleanupPage(int id) |
| virtual void | initializePage(int id) |
Reimplemented Protected Functions
| virtual void | done(int result) override |
| virtual bool | event(QEvent *event) override |
| virtual bool | nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override |
| virtual void | paintEvent(QPaintEvent *event) override |
| virtual void | resizeEvent(QResizeEvent *event) override |
Подробное описание
Мастер (также называемый помощником на macOS) — это особый тип диалогового окна ввода, состоящий из последовательности страниц. Цель мастера — поэтапно направлять пользователя по процессу. Мастера полезны для сложных или редких задач, освоение которых пользователями может оказаться затруднительным.
QWizard наследуется от QDialog и представляет собой мастера. Каждая страница — это QWizardPage (подкласс QWidget). Для создания собственных мастеров можно использовать эти классы напрямую или наследоваться от них для большего контроля.
Темы:
Простой пример
Следующий пример демонстрирует, как создавать страницы мастера и добавлять их в мастер. Для более сложных примеров см. Класс Мастера и Мастер лицензий.
QWizardPage *createIntroPage()
{
QWizardPage *page = new QWizardPage;
page->setTitle("Introduction");
QLabel *label = new QLabel("This wizard will help you register your copy "
"of Super Product Two.");
label->setWordWrap(true);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
page->setLayout(layout);
return page;
}
QWizardPage *createRegistrationPage()
{
...
}
QWizardPage *createConclusionPage()
{
...
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
#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);
#endif
QWizard wizard;
wizard.addPage(createIntroPage());
wizard.addPage(createRegistrationPage());
wizard.addPage(createConclusionPage());
wizard.setWindowTitle("Trivial Wizard");
wizard.show();
return app.exec();
} Вид мастера
QWizard поддерживает четыре вида мастеров:
Вы можете явно установить используемый вид с помощью setWizardStyle() (например, если вам нужен один и тот же вид на всех платформах).
| ClassicStyle | ModernStyle | MacStyle | AeroStyle |
|---|---|---|---|
Примечание: AeroStyle имеет эффект только на системе Windows Vista с включенным альфа-компостированием. ModernStyle используется в качестве резервного варианта, когда это условие не выполняется.
Помимо стиля мастера, существуют несколько вариантов, контролирующих внешний вид мастера. Их можно установить с помощью setOption() или setOptions(). Например, HaveHelpButton заставляет QWizard отображать кнопку Справка вместе с другими кнопками мастера.
Вы даже можете изменить порядок кнопок мастера на произвольный порядок с помощью setButtonLayout(), и вы можете добавить до трёх пользовательских кнопок (например, кнопку Печать) в строку кнопок. Это достигается вызовом setButton() или setButtonText() с CustomButton1, CustomButton2 или CustomButton3 для настройки кнопки и включением опций HaveCustomButton1, HaveCustomButton2 или HaveCustomButton3. При нажатии пользователем пользовательской кнопки генерируется сигнал customButtonClicked(). Например:
wizard()->setButtonText(QWizard::CustomButton1, tr("&Print"));
wizard()->setOption(QWizard::HaveCustomButton1, true);
connect(wizard(), &QWizard::customButtonClicked,
this, &ConclusionPage::printButtonClicked); Элементы страницы мастера
Мастера состоят из последовательности QWizardPages. В любой момент времени отображается только одна страница. У страницы есть следующие атрибуты:
- Заголовок title.
- Подзаголовок subTitle.
- Набор растровых изображений, которые могут или не могут быть учтены в зависимости от стиля мастера:
- WatermarkPixmap (используется ClassicStyle и ModernStyle)
- BannerPixmap (используется ModernStyle)
- LogoPixmap (используется ClassicStyle и ModernStyle)
- BackgroundPixmap (используется MacStyle)
Диаграмма ниже показывает, как QWizard отображает эти атрибуты, предполагая, что все они присутствуют и используется ModernStyle:
Когда установлен подзаголовок subTitle, QWizard отображает его в заголовке, в этом случае он также использует BannerPixmap и LogoPixmap для украшения заголовка. WatermarkPixmap отображается слева, ниже заголовка. Внизу расположена строка кнопок, позволяющих пользователю перемещаться по страницам.
Сама страница (виджет QWizardPage) занимает область между заголовком, водяным знаком и строкой кнопок. Как правило, страница представляет собой QWizardPage, на котором установлен QGridLayout со стандартными дочерними виджетами (QLabels, QLineEdits и т. д.).
Если стиль мастера — MacStyle, внешний вид страницы радикально отличается:
Водяные знаки, баннеры и значки логотипов игнорируются стилем MacStyle. Если установлено BackgroundPixmap, оно используется в качестве фона мастера; в противном случае используется изображение по умолчанию «помощника».
Заголовок и подзаголовок устанавливаются с помощью вызова QWizardPage::setTitle() и QWizardPage::setSubTitle() на отдельных страницах. Они могут быть обычным текстом или HTML (см. titleFormat и subTitleFormat). Растровые изображения могут быть установлены глобально для всего мастера с помощью setPixmap() или на странице с помощью QWizardPage::setPixmap().
Регистрация и использование полей
Во многих мастерах содержимое страницы может влиять на значения полей на последующей странице. Для облегчения взаимодействия между страницами QWizard поддерживает механизм «полей», который позволяет зарегистрировать поле (например, QLineEdit) на странице и получить доступ к его значению с любой другой страницы. Также можно указать обязательные поля (т. е. поля, которые должны быть заполнены, прежде чем пользователь сможет перейти к следующей странице).
Для регистрации поля используйте QWizardPage::registerField() field. Например:
ClassInfoPage::ClassInfoPage(QWidget *parent)
: QWizardPage(parent)
{
...
classNameLabel = new QLabel(tr("&Class name:"));
classNameLineEdit = new QLineEdit;
classNameLabel->setBuddy(classNameLineEdit);
baseClassLabel = new QLabel(tr("B&ase class:"));
baseClassLineEdit = new QLineEdit;
baseClassLabel->setBuddy(baseClassLineEdit);
qobjectMacroCheckBox = new QCheckBox(tr("Generate Q_OBJECT ¯o"));
registerField("className*", classNameLineEdit);
registerField("baseClass", baseClassLineEdit);
registerField("qobjectMacro", qobjectMacroCheckBox);
...
} Вышеприведённый код регистрирует три поля, className, baseClass, и qobjectMacro, которые связаны с тремя дочерними виджетами. Звёздочка (*) рядом с className обозначает обязательное поле.
Поля любой страницы доступны с любой другой страницы. Например:
void OutputFilesPage::initializePage()
{
QString className = field("className").toString();
headerLineEdit->setText(className.toLower() + ".h");
implementationLineEdit->setText(className.toLower() + ".cpp");
outputDirLineEdit->setText(QDir::toNativeSeparators(QDir::tempPath()));
} Здесь мы используем QWizardPage::field() для доступа к содержимому поля className (которое было определено на ClassInfoPage) и используем его для инициализации OutputFilePage. Содержимое поля возвращается как QVariant.
При создании поля с помощью QWizardPage::registerField(), мы передаём уникальное имя поля и виджет. Мы также можем предоставить имя свойства Qt и сигнал «изменение» (сигнал, который генерируется при изменении свойства) в качестве третьих и четвёртых аргументов; однако это не обязательно для наиболее распространённых виджетов Qt, таких как QLineEdit, QCheckBox и QComboBox, потому что QWizard знает, какие свойства искать.
Если к имени добавляется звёздочка (*) при регистрации свойства, поле является обязательным полем. Когда у страницы есть обязательные поля, кнопки Далее и/или Готово активируются только при заполнении всех обязательных полей.
Для того, чтобы считать поле «заполненным», QWizard просто проверяет, что текущее значение поля не равно исходному значению (значению, которое оно имело, когда был вызван initializePage()). Для подклассов QLineEdit и QAbstractSpinBox, QWizard также проверяет, что hasAcceptableInput() возвращает true, чтобы учесть любой валидатор или маску.
Механизм обязательных полей QWizard предоставлен для удобства. Более мощная (но также и более сложная) альтернатива — переопределить QWizardPage::isComplete() и испускать сигнал QWizardPage::completeChanged() всякий раз, когда страница становится полной или неполной.
Состояние включения/выключения кнопок Далее и/или Готово — один из способов выполнения валидации пользовательского ввода. Другой способ — переопределить validateCurrentPage() (или QWizardPage::validatePage()), чтобы выполнить проверку в последний момент (и отобразить сообщение об ошибке, если пользователь ввёл неполную или неверную информацию). Если функция возвращает true, следующая страница отображается (или мастер завершается); в противном случае текущая страница остаётся открытой.
Создание линейных мастеров
Большинство мастеров имеют линейную структуру, со страницей 1, затем страницей 2 и так далее до последней страницы. Пример Мастера классов является таким мастером. В QWizard линейные мастера создаются путём создания экземпляров QWizardPage и вставки их с помощью addPage(). По умолчанию страницы отображаются в том порядке, в котором они были добавлены. Например:
ClassWizard::ClassWizard(QWidget *parent)
: QWizard(parent)
{
addPage(new IntroPage);
addPage(new ClassInfoPage);
addPage(new CodeStylePage);
addPage(new OutputFilesPage);
addPage(new ConclusionPage);
...
} Когда страница собирается отобразиться, QWizard вызывает initializePage() (который, в свою очередь, вызывает QWizardPage::initializePage()), чтобы заполнить страницу значениями по умолчанию. По умолчанию эта функция ничего не делает, но её можно переопределить, чтобы инициализировать содержимое страницы на основе полей других страниц (см. пример выше).
Если пользователь нажмёт кнопку Назад, вызывается cleanupPage() (который, в свою очередь, вызывает QWizardPage::cleanupPage()). По умолчанию реализация сбрасывает поля страницы до их исходных значений (значений, которые они имели до вызова initializePage()). Если вы хотите, чтобы кнопка Назад была неразрушительной и сохраняла значения, введённые пользователем, просто включите опцию IndependentPages.
Создание нелинейных мастеров
Некоторые мастера более сложные, поскольку они позволяют различные пути обхода, основанные на информации, предоставленной пользователем. Пример Мастера лицензий иллюстрирует это. Он предоставляет пять страниц мастера; в зависимости от выбранных опций, пользователь может достичь разных страниц.
В сложных мастерах страницы идентифицируются с помощью идентификаторов. Эти идентификаторы обычно определяются с помощью перечисления. Например:
class LicenseWizard : public QWizard
{
...
enum { Page_Intro, Page_Evaluate, Page_Register, Page_Details,
Page_Conclusion };
...
}; Страницы вставляются с помощью setPage(), который принимает идентификатор и экземпляр QWizardPage (или подкласса):
LicenseWizard::LicenseWizard(QWidget *parent)
: QWizard(parent)
{
setPage(Page_Intro, new IntroPage);
setPage(Page_Evaluate, new EvaluatePage);
setPage(Page_Register, new RegisterPage);
setPage(Page_Details, new DetailsPage);
setPage(Page_Conclusion, new ConclusionPage);
...
} По умолчанию страницы отображаются в порядке возрастания идентификатора. Чтобы обеспечить динамический порядок, зависящий от опций, выбранных пользователем, необходимо переопределить QWizardPage::nextId(). Например:
int IntroPage::nextId() const
{
if (evaluateRadioButton->isChecked()) {
return LicenseWizard::Page_Evaluate;
} else {
return LicenseWizard::Page_Register;
}
}
int EvaluatePage::nextId() const
{
return LicenseWizard::Page_Conclusion;
}
int RegisterPage::nextId() const
{
if (upgradeKeyLineEdit->text().isEmpty()) {
return LicenseWizard::Page_Details;
} else {
return LicenseWizard::Page_Conclusion;
}
}
int DetailsPage::nextId() const
{
return LicenseWizard::Page_Conclusion;
}
int ConclusionPage::nextId() const
{
return -1;
} Также было бы возможно поместить всю логику в одно место, в переопределении QWizard::nextId(). Например:
int LicenseWizard::nextId() const
{
switch (currentId()) {
case Page_Intro:
if (field("intro.evaluate").toBool()) {
return Page_Evaluate;
} else {
return Page_Register;
}
case Page_Evaluate:
return Page_Conclusion;
case Page_Register:
if (field("register.upgradeKey").toString().isEmpty()) {
return Page_Details;
} else {
return Page_Conclusion;
}
case Page_Details:
return Page_Conclusion;
case Page_Conclusion:
default:
return -1;
}
} Чтобы начать с другой страницы, чем страница с самым низким идентификатором, вызовите setStartId().
Чтобы проверить, была ли страница посещена или нет, вызовите hasVisitedPage(). Например:
void ConclusionPage::initializePage()
{
QString licenseText;
if (wizard()->hasVisitedPage(LicenseWizard::Page_Evaluate)) {
licenseText = tr("<u>Evaluation License Agreement:</u> "
"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)) {
licenseText = tr("<u>First-Time License Agreement:</u> "
"You can use this software subject to the license "
"you will receive by email.");
} else {
licenseText = tr("<u>Upgrade License Agreement:</u> "
"This software is licensed under the terms of your "
"current license.");
}
bottomLabel->setText(licenseText);
} См. также QWizardPage, Пример Мастера классов и Пример Мастера лицензий.
Документация по типам членов
Перечисление QWizard::WizardButton
Это перечисление определяет кнопки в мастере.
| Постоянная | Значение | Описание |
|---|---|---|
QWizard::BackButton |
0 |
Кнопка Назад (Назад на macOS) |
QWizard::NextButton |
1 |
Кнопка Далее (Продолжить на macOS) |
QWizard::CommitButton |
2 |
Кнопка Подтвердить |
QWizard::FinishButton |
3 |
Кнопка Готово (Завершить на macOS) |
QWizard::CancelButton |
4 |
Кнопка Отмена (см. также NoCancelButton) |
QWizard::HelpButton |
5 |
Кнопка Помощь (см. также HaveHelpButton) |
QWizard::CustomButton1 |
6 |
Первая настраиваемая кнопка (см. также HaveCustomButton1) |
QWizard::CustomButton2 |
7 |
Вторая настраиваемая кнопка (см. также HaveCustomButton2) |
QWizard::CustomButton3 |
8 |
Третья настраиваемая кнопка (см. также HaveCustomButton3) |
Следующее значение полезно только при вызове setButtonLayout():
| Постоянная | Значение | Описание |
|---|---|---|
QWizard::Stretch |
9 |
Горизонтальное растяжение в макете кнопок |
См. также setButton(), setButtonText(), setButtonLayout() и customButtonClicked().
Перечисление QWizard::WizardOptionфлаги QWizard::WizardOptions
Это перечисление определяет различные параметры, которые влияют на вид и ощущения мастера.
| Постоянная | Значение | Описание |
|---|---|---|
QWizard::IndependentPages |
0x00000001 |
Страницы независимы друг от друга (т.е. не выводят значения друг из друга). |
QWizard::IgnoreSubTitles |
0x00000002 |
Не отображать подзаголовки, даже если они установлены. |
QWizard::ExtendedWatermarkPixmap |
0x00000004 |
Расширить любой WatermarkPixmap до края окна. |
QWizard::NoDefaultButton |
0x00000008 |
Не делать кнопку Далее или Готово кнопкой по умолчанию диалога. |
QWizard::NoBackButtonOnStartPage |
0x00000010 |
Не отображать кнопку Назад на стартовой странице. |
QWizard::NoBackButtonOnLastPage |
0x00000020 |
Не отображать кнопку Назад на последней странице. |
QWizard::DisabledBackButtonOnLastPage |
0x00000040 |
Отключить кнопку Назад на последней странице. |
QWizard::HaveNextButtonOnLastPage |
0x00000080 |
Отображать кнопку Далее (отключенную) на последней странице. |
QWizard::HaveFinishButtonOnEarlyPages |
0x00000100 |
Отображать кнопку Готово (отключенную) на неконечных страницах. |
QWizard::NoCancelButton |
0x00000200 |
Не отображать кнопку Отмена. |
QWizard::CancelButtonOnLeft |
0x00000400 |
Поместить кнопку Отмена слева от Назад (а не справа от Готово или Далее). |
QWizard::HaveHelpButton |
0x00000800 |
Отобразить кнопку Помощь. |
QWizard::HelpButtonOnRight |
0x00001000 |
Поместить кнопку Помощь в крайнем правом углу макета кнопок (а не в крайнем левом). |
QWizard::HaveCustomButton1 |
0x00002000 |
Отобразить первую настраиваемую кнопку (CustomButton1). |
QWizard::HaveCustomButton2 |
0x00004000 |
Отобразить вторую настраиваемую кнопку (CustomButton2). |
QWizard::HaveCustomButton3 |
0x00008000 |
Отобразить третью настраиваемую кнопку (CustomButton3). |
QWizard::NoCancelButtonOnLastPage |
0x00010000 |
Не отображать кнопку Отмена на последней странице. |
Тип WizardOptions — это typedef для QFlags<WizardOption>. Он хранит логическое ИЛИ сочетание значений WizardOption.
См. также setOptions(), setOption() и testOption().
перечисление QWizard::WizardPixmap
Это перечисление определяет пиктограммы, которые могут быть связаны со страницей.
| Постоянная | Значение | Описание |
|---|---|---|
QWizard::WatermarkPixmap |
0 |
Высокая пиктограмма слева на странице ClassicStyle или ModernStyle |
QWizard::LogoPixmap |
1 |
Маленькая пиктограмма справа в заголовке страницы ClassicStyle или ModernStyle |
QWizard::BannerPixmap |
2 |
Пиктограмма, занимающая фоновый фон заголовка страницы ModernStyle |
QWizard::BackgroundPixmap |
3 |
Пиктограмма, занимающая фоновый фон мастера MacStyle |
См. также setPixmap(), QWizardPage::setPixmap() и Элементы страницы мастера.
перечисление QWizard::WizardStyle
Это перечисление определяет различные стили, поддерживаемые QWizard.
| Постоянная | Значение | Описание |
|---|---|---|
QWizard::ClassicStyle |
0 |
Классический вид Windows |
QWizard::ModernStyle |
1 |
Современный вид Windows |
QWizard::MacStyle |
2 |
Вид macOS |
QWizard::AeroStyle |
3 |
Вид Windows Aero |
См. также setWizardStyle(), WizardOption и Внешний вид мастера.
Документация по свойствам
[read-only] currentId : const int
Это свойство содержит ID текущей страницы.
Это свойство нельзя установить напрямую. Чтобы изменить текущую страницу, вызовите next(), back() или restart().
По умолчанию это свойство имеет значение -1, что означает, что в данный момент ни одна страница не отображается.
Функции доступа:
| int | currentId() const |
Сигнал уведомления:
| void | currentIdChanged(int id) |
См. также currentPage().
options : WizardOptions
Это свойство хранит различные параметры, влияющие на внешний вид мастера.
По умолчанию следующие параметры установлены (в зависимости от платформы):
- Windows: HelpButtonOnRight.
- macOS: NoDefaultButton и NoCancelButton.
- X11 и QWS (Qt for Embedded Linux): нет.
Функции доступа:
| QWizard::WizardOptions | options() const |
| void | setOptions(QWizard::WizardOptions options) |
См. также wizardStyle.
startId : int
Это свойство содержит ID первой страницы.
Если это свойство не установлено явно, оно по умолчанию равно наименьшему ID страницы в данном мастерстве или -1, если страница ещё не добавлена.
Функции доступа:
| int | startId() const |
| void | setStartId(int id) |
См. также restart() и nextId().
subTitleFormat : Qt::TextFormat
Это свойство хранит формат текста, используемый подзаголовками страниц.
Формат по умолчанию — Qt::AutoText.
Функции доступа:
| Qt::TextFormat | subTitleFormat() const |
| void | setSubTitleFormat(Qt::TextFormat format) |
См. также QWizardPage::title и titleFormat.
titleFormat : Qt::TextFormat
Это свойство хранит формат текста, используемый заголовками страниц.
Формат по умолчанию — Qt::AutoText.
Функции доступа:
| Qt::TextFormat | titleFormat() const |
| void | setTitleFormat(Qt::TextFormat format) |
См. также QWizardPage::title и subTitleFormat.
wizardStyle : WizardStyle
Это свойство хранит внешний вид мастера.
По умолчанию QWizard использует AeroStyle на системе Windows Vista с включенным альфа-композированием, независимо от текущего стиля виджета. Если это не так, стиль мастера по умолчанию зависит от текущего стиля виджета следующим образом: MacStyle — это значение по умолчанию, если текущий стиль виджета — QMacStyle, ModernStyle — значение по умолчанию, если текущий стиль виджета — QWindowsStyle, а ClassicStyle — значение по умолчанию во всех остальных случаях.
Функции доступа:
| QWizard::WizardStyle | wizardStyle() const |
| void | setWizardStyle(QWizard::WizardStyle style) |
См. также Внешний вид мастера и options.
Документация по функциям-членам
QWizard::QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
Создает мастера с заданным parent и флагами окна flags.
См. также parent() и windowFlags().
[slot] void QWizard::back()
Переходит к предыдущей странице.
Это эквивалентно нажатию кнопки Назад.
См. также next(), accept(), reject() и restart().
[signal] void QWizard::currentIdChanged(int id)
Этот сигнал испускается при изменении текущей страницы с новым текущим id.
Примечание: Сигнал уведомления для свойства currentId.
См. также currentId() и currentPage().
[signal] void QWizard::customButtonClicked(int which)
Этот сигнал испускается при нажатии пользователем пользовательской кнопки. which может быть CustomButton1, CustomButton2 или CustomButton3.
По умолчанию пользовательская кнопка не отображается. Вызовите setOption() с HaveCustomButton1, HaveCustomButton2 или HaveCustomButton3, чтобы её отобразить, и используйте setButtonText() или setButton(), чтобы её настроить.
См. также helpRequested().
[signal] void QWizard::helpRequested()
Этот сигнал испускается при нажатии пользователем кнопки Справка.
По умолчанию кнопка Справка не отображается. Вызовите setOption(HaveHelpButton, true), чтобы её отобразить.
Пример:
LicenseWizard::LicenseWizard(QWidget *parent)
: QWizard(parent)
{
...
setOption(HaveHelpButton, true);
connect(this, &QWizard::helpRequested, this, &LicenseWizard::showHelp);
...
}
void LicenseWizard::showHelp()
{
static QString lastHelpMessage;
QString message;
switch (currentId()) {
case Page_Intro:
message = tr("The decision you make here will affect which page you "
"get to see next.");
break;
...
default:
message = tr("This help is likely not to be of any help.");
}
QMessageBox::information(this, tr("License Wizard Help"), message);
} См. также customButtonClicked().
[slot] void QWizard::next()
Переходит к следующей странице.
Это эквивалентно нажатию кнопки Далее или Подтвердить.
См. также nextId(), back(), accept(), reject() и restart().
[signal] void QWizard::pageAdded(int id)
Этот сигнал генерируется всякий раз, когда к мастеру добавляется страница. ID страницы передаётся в качестве параметра.
См. также addPage(), setPage() и startId().
[signal] void QWizard::pageRemoved(int id)
Этот сигнал генерируется всякий раз, когда страница удаляется из мастера. ID страницы передаётся в качестве параметра.
См. также removePage() и startId().
[slot] void QWizard::restart()
Перезапускает мастер с начальной страницы. Эта функция вызывается автоматически при отображении мастера.
См. также startId().
[virtual] QWizard::~QWizard()
Удаляет мастер и его страницы, освобождая выделенные ресурсы.
int QWizard::addPage(QWizardPage *page)
Добавляет заданную страницу к мастеру и возвращает ID страницы.
ID гарантированно будет больше любого другого ID в QWizard на данный момент.
См. также setPage(), page() и pageAdded().
QAbstractButton *QWizard::button(QWizard::WizardButton which) const
Возвращает кнопку, соответствующую роли which.
См. также setButton() и setButtonText().
QString QWizard::buttonText(QWizard::WizardButton which) const
Возвращает текст на кнопке which.
Если текст был задан с помощью setButtonText(), возвращается этот текст.
По умолчанию текст на кнопках зависит от стиля мастера wizardStyle. Например, в macOS кнопка Далее называется Продолжить.
См. также button(), setButton(), setButtonText(), QWizardPage::buttonText() и QWizardPage::setButtonText().
[virtual protected] void QWizard::cleanupPage(int id)
Эта виртуальная функция вызывается QWizard для очистки страницы id перед тем, как пользователь покидает её, нажав Назад (если опция QWizard::IndependentPages не установлена).
По умолчанию вызывается QWizardPage::cleanupPage() для страницы(id).
См. также QWizardPage::cleanupPage() и initializePage().
QWizardPage *QWizard::currentPage() const
Возвращает указатель на текущую страницу или nullptr если текущей страницы нет (например, до отображения мастера).
Эквивалентно вызову page(currentId()).
См. также page(), currentId() и restart().
[override virtual protected] void QWizard::done(int result)
Переопределяет: QDialog::done(int r).
[override virtual protected] bool QWizard::event(QEvent *event)
Переопределяет: QWidget::event(QEvent *event).
QVariant QWizard::field(const QString &name) const
Возвращает значение поля с именем name.
Эта функция может использоваться для доступа к полям на любой странице мастера.
См. также QWizardPage::registerField(), QWizardPage::field() и setField().
bool QWizard::hasVisitedPage(int id) const
Возвращает true если в истории посещений есть страница id; в противном случае возвращает false.
Нажатие Назад помечает текущую страницу как "не посещённую" снова.
См. также visitedIds().
[virtual protected] void QWizard::initializePage(int id)
Эта виртуальная функция вызывается QWizard для подготовки страницы id перед её отображением в результате вызова QWizard::restart() или по нажатию пользователем кнопки Далее. (Однако, если опция QWizard::IndependentPages установлена, эта функция вызывается только в первый раз при отображении страницы.)
Переопределяя эту функцию, можно гарантировать, что поля страницы правильно инициализируются на основе полей с предыдущих страниц.
По умолчанию вызывается QWizardPage::initializePage() для страницы(id).
См. также QWizardPage::initializePage() и cleanupPage().
[override virtual protected] bool QWizard::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
Переопределяет: QWidget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result).
[virtual] int QWizard::nextId() const
Эта виртуальная функция вызывается QWizard для определения страницы, которая должна быть отображена при нажатии пользователем кнопки Далее.
Возвращаемое значение — ID следующей страницы, или -1, если следующей страницы нет.
По умолчанию вызывается QWizardPage::nextId() для currentPage().
Переопределяя эту функцию, можно указать динамический порядок страниц.
См. также QWizardPage::nextId() и currentPage().
QWizardPage *QWizard::page(int id) const
Возвращает страницу с заданным id или nullptr если такой страницы нет.
См. также addPage() и setPage().
QList<int> QWizard::pageIds() const
Возвращает список идентификаторов страниц.
[override virtual protected] void QWizard::paintEvent(QPaintEvent *event)
Переопределяет: QWidget::paintEvent(QPaintEvent *event).
QPixmap QWizard::pixmap(QWizard::WizardPixmap which) const
Возвращает пиктограмму, заданную для роли which.
По умолчанию единственная заданная пиктограмма — BackgroundPixmap в macOS версии 10.13 и ранее.
См. также setPixmap(), QWizardPage::pixmap() и Элементы страницы мастера.
void QWizard::removePage(int id)
Удаляет страницу с заданным id. cleanupPage() будет вызван при необходимости.
Примечание: Удаление страницы может повлиять на значение свойства startId.
См. также addPage(), setPage(), pageRemoved() и startId().
[override virtual protected] void QWizard::resizeEvent(QResizeEvent *event)
Переопределяет: QDialog::resizeEvent(QResizeEvent *).
void QWizard::setButton(QWizard::WizardButton which, QAbstractButton *button)
Устанавливает кнопку, соответствующую роли which, на button.
Для добавления дополнительных кнопок в мастер (например, кнопки Печать), можно вызвать setButton() с CustomButton1 по CustomButton3, а затем сделать кнопки видимыми с помощью опций HaveCustomButton1 по HaveCustomButton3.
См. также button(), setButtonText(), setButtonLayout() и options.
void QWizard::setButtonLayout(const QList<QWizard::WizardButton> &layout)
Устанавливает порядок отображения кнопок в layout, где layout — список элементов WizardButton.
Значение по умолчанию зависит от установленных опций (например, HelpButtonOnRight). Вы можете вызвать эту функцию, если вам нужен больший контроль над расположением кнопок, чем предоставляет options.
Вы можете указать горизонтальные растяжения в макете с помощью Stretch.
Пример:
MyWizard::MyWizard(QWidget *parent)
: QWizard(parent)
{
...
QList<QWizard::WizardButton> layout;
layout << QWizard::Stretch << QWizard::BackButton << QWizard::CancelButton
<< QWizard::NextButton << QWizard::FinishButton;
setButtonLayout(layout);
...
} См. также setButton(), setButtonText() и setOptions().
void QWizard::setButtonText(QWizard::WizardButton which, const QString &text)
Устанавливает текст на кнопке which в text.
По умолчанию текст на кнопках зависит от wizardStyle. Например, на macOS кнопка Далее называется Продолжить.
Для добавления дополнительных кнопок в мастер (например, кнопки Печать), можно вызвать setButtonText() с CustomButton1, CustomButton2 или CustomButton3 для установки их текста и сделать кнопки видимыми с помощью опций HaveCustomButton1, HaveCustomButton2 и/или HaveCustomButton3.
Текст кнопок также может быть установлен на странице с помощью QWizardPage::setButtonText().
См. также buttonText(), setButton(), button(), setButtonLayout(), setOptions() и QWizardPage::setButtonText().
void QWizard::setDefaultProperty(const char *className, const char *property, const char *changedSignal)
Устанавливает свойство по умолчанию для className в property, а связанный сигнал изменения в changedSignal.
Свойство по умолчанию используется, когда экземпляр className (или одного из его подклассов) передается в QWizardPage::registerField() без указания свойства.
QWizard знает наиболее распространённые виджеты Qt. Для них (или их подклассов) вам не нужно указывать property или changedSignal. В таблице ниже перечислены эти виджеты:
| Виджет | Свойство | Сигнал уведомления о изменении |
|---|---|---|
| QAbstractButton | bool checked | toggled() |
| QAbstractSlider | int value | valueChanged() |
| QComboBox | int currentIndex | currentIndexChanged() |
| QDateTimeEdit | QDateTime dateTime | dateTimeChanged() |
| QLineEdit | QString text | textChanged() |
| QListWidget | int currentRow | currentRowChanged() |
| QSpinBox | int value | valueChanged() |
См. также QWizardPage::registerField().
void QWizard::setField(const QString &name, const QVariant &value)
Устанавливает значение поля с именем name в value.
Эта функция может использоваться для установки полей на любой странице мастера.
См. также QWizardPage::registerField(), QWizardPage::setField() и field().
void QWizard::setOption(QWizard::WizardOption option, bool on = true)
Устанавливает заданную опцию option в состояние включения, если on равно true, иначе очищает данную опцию.
См. также options, testOption() и setWizardStyle().
void QWizard::setPage(int id, QWizardPage *page)
Добавляет заданную page к мастеру с заданным id.
Примечание: Добавление страницы может повлиять на значение свойства startId, если оно не было явно установлено.
См. также addPage(), page() и pageAdded().
void QWizard::setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
Устанавливает пиктограмму для роли which в pixmap.
Пиктограммы используются QWizard при отображении страницы. Какие именно пиктограммы используются, зависит от стиля мастера wizard style.
Пиктограммы также могут быть установлены для конкретной страницы с помощью QWizardPage::setPixmap().
См. также pixmap(), QWizardPage::setPixmap() и Элементы страницы мастера.
void QWizard::setSideWidget(QWidget *widget)
Устанавливает заданный widget для отображения слева от мастера. Для стилей, использующих WatermarkPixmap (ClassicStyle и ModernStyle), виджет отображается поверх водяного знака, а для других стилей или при отсутствии водяного знака — слева от мастера.
Передача nullptr не отображает виджет слева.
Если widget не nullptr, мастер изменяет его родителя.
Любой предыдущий виджет слева скрывается.
Вы можете вызвать setSideWidget() с тем же виджетом в разное время.
Все виджеты, установленные здесь, будут удалены мастером при его уничтожении, если вы не измените родительский виджет после установки другого виджета слева (или nullptr) .
По умолчанию виджет слева отсутствует.
См. также sideWidget().
[override virtual] void QWizard::setVisible(bool visible)
Переопределяет: QDialog::setVisible(bool visible).
QWidget *QWizard::sideWidget() const
Возвращает виджет слева от мастера или nullptr. По умолчанию виджета слева нет.
См. также setSideWidget().
[override virtual] QSize QWizard::sizeHint() const
Переопределяет: QDialog::sizeHint() const.
bool QWizard::testOption(QWizard::WizardOption option) const
Возвращает true, если заданная опция option включена, иначе возвращает false.
См. также options, setOption() и setWizardStyle().
[virtual] bool QWizard::validateCurrentPage()
Эта виртуальная функция вызывается QWizard при нажатии пользователем кнопок Далее или Готово для выполнения проверки. Если функция возвращает true, отображается следующая страница (или мастер завершается); иначе текущая страница остается активной.
Реализация по умолчанию вызывает QWizardPage::validatePage() для currentPage().
Когда это возможно, обычно лучше отключать кнопку Далее или Готово (указав обязательные поля или переопределив QWizardPage::isComplete()) вместо переопределения validateCurrentPage().
См. также QWizardPage::validatePage() и currentPage().
[since 5.15] QList<int> QWizard::visitedIds() const
Возвращает список идентификаторов посещённых страниц в порядке их посещения.
Эта функция была добавлена в Qt 5.15.
См. также hasVisitedPage().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qwizard.html