Класс QWizardPage
Класс QWizardPage является базовым классом для страниц мастера. Подробнее...
| Заголовок: | #include <QWizardPage> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QWidget |
Свойства
Открытые функции
| QWizardPage(QWidget *parent = nullptr) | |
| virtual | ~QWizardPage() |
| QString | buttonText(QWizard::WizardButton which) const |
| virtual void | cleanupPage() |
| virtual void | initializePage() |
| bool | isCommitPage() const |
| virtual bool | isComplete() const |
| bool | isFinalPage() const |
| virtual int | nextId() const |
| QPixmap | pixmap(QWizard::WizardPixmap which) const |
| void | setButtonText(QWizard::WizardButton which, const QString &text) |
| void | setCommitPage(bool commitPage) |
| void | setFinalPage(bool finalPage) |
| void | setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap) |
| void | setSubTitle(const QString &subTitle) |
| void | setTitle(const QString &title) |
| QString | subTitle() const |
| QString | title() const |
| virtual bool | validatePage() |
Сигналы
| void | completeChanged() |
Защищенные функции
| QVariant | field(const QString &name) const |
| void | registerField(const QString &name, QWidget *widget, const char *property = nullptr, const char *changedSignal = nullptr) |
| void | setField(const QString &name, const QVariant &value) |
| QWizard * | wizard() const |
Подробное описание
QWizard представляет собой мастера. Каждая страница — это QWizardPage. При создании собственных мастеров вы можете использовать QWizardPage напрямую или наследоваться от него для большего контроля.
У страницы есть следующие атрибуты, которые отображаются мастером QWizard: заголовок (title), подзаголовок (subTitle) и набор изображений (set of pixmaps). Подробнее см. Элементы страницы мастера. После добавления страницы в мастер (с помощью QWizard::addPage() или QWizard::setPage()), wizard() возвращает указатель на связанный объект QWizard.
Страница предоставляет пять виртуальных функций, которые можно переопределить для предоставления пользовательского поведения:
- initializePage() вызывается для инициализации содержимого страницы, когда пользователь нажимает кнопку Далее мастера. Если вы хотите получить значения по умолчанию страницы на основе того, что пользователь ввёл на предыдущих страницах, переопределите эту функцию.
- cleanupPage() вызывается для сброса содержимого страницы, когда пользователь нажимает кнопку Назад мастера.
- validatePage() валидирует страницу, когда пользователь нажимает кнопки Далее или Готово. Часто используется для отображения сообщения об ошибке, если пользователь ввёл неполную или некорректную информацию.
- nextId() возвращает идентификатор следующей страницы. Полезно при создании нелинейных мастеров, которые позволяют использовать разные пути навигации, в зависимости от информации, предоставленной пользователем.
- isComplete() вызывается для определения, следует ли включать или отключать кнопки Далее и/или Готово. Если вы переопределили isComplete(), убедитесь, что также вызывается completeChanged() всякий раз, когда состояние завершения изменяется.
Обычно кнопки Далее и Готово мастера взаимно исключают друг друга. Если isFinalPage() возвращает true, доступна кнопка Готово; в противном случае, доступна кнопка Далее. По умолчанию isFinalPage() возвращает true только в том случае, если nextId() возвращает -1. Если вы хотите отобразить одновременно кнопки Далее и Готово для страницы (позволяя пользователю выполнить "раннее завершение"), вызовите setFinalPage(true) для этой страницы. Для мастеров, поддерживающих раннее завершение, также может потребоваться установить опции HaveNextButtonOnLastPage и HaveFinishButtonOnEarlyPages мастера.
Во многих мастерах содержимое страницы может влиять на значения по умолчанию полей последующей страницы. Для упрощения обмена данными между страницами QWizard поддерживает механизм "полей", который позволяет зарегистрировать поле (например, QLineEdit) на странице и получить его значение с любой другой страницы. Поля являются глобальными для всего мастера и позволяют любой странице получить доступ к информации, хранимой другой страницей, без необходимости размещения всей логики в QWizard или явного знания страниц друг о друге. Поля регистрируются с помощью registerField() и могут быть получены в любой момент с помощью field() и setField().
См. также QWizard, Пример класса мастера и Пример мастера лицензий.
END_OF_DOCUMENT_MARKERДокументация свойств
subTitle : QString
Это свойство содержит подзаголовок страницы.
Подзаголовок отображается в QWizard между заголовком и собственно страницей. Подзаголовки необязательны. В стилях ClassicStyle и ModernStyle использование подзаголовков необходимо для отображения заголовка. В стиле MacStyle подзаголовок отображается как метка текста непосредственно над собственно страницей.
Подзаголовок может быть обычным текстом или HTML, в зависимости от значения свойства QWizard::subTitleFormat.
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | subTitle() const |
| void | setSubTitle(const QString &subTitle) |
См. также title, QWizard::IgnoreSubTitles и Элементы страницы мастера.
title : QString
Это свойство содержит заголовок страницы.
Заголовок отображается в QWizard над собственно страницей. У всех страниц должен быть заголовок.
Заголовок может быть обычным текстом или HTML, в зависимости от значения свойства QWizard::titleFormat.
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | title() const |
| void | setTitle(const QString &title) |
См. также subTitle и Элементы страницы мастера.
Документация по членам-функциям
QWizardPage::QWizardPage(QWidget *parent = nullptr)
Создаёт страницу мастера с заданным parent.
При вставке страницы в мастер с помощью QWizard::addPage() или QWizard::setPage(), родительский элемент автоматически устанавливается в мастер.
См. также wizard().
[signal] void QWizardPage::completeChanged()
Этот сигнал испускается всякий раз, когда состояние завершения страницы (т. е. значение isComplete()) изменяется.
Если вы переопределяете isComplete(), убедитесь, что испускается completeChanged(), всякий раз, когда изменяется значение isComplete(), чтобы обеспечить обновление QWizard состояния кнопок «enabled» или «disabled».
См. также isComplete().
[virtual] QWizardPage::~QWizardPage()
Деструктор.
QString QWizardPage::buttonText(QWizard::WizardButton which) const
Возвращает текст на кнопке which на этой странице.
Если текст был задан с помощью setButtonText(), возвращается этот текст. В противном случае, если текст был задан с помощью QWizard::setButtonText(), возвращается этот текст.
По умолчанию текст на кнопках зависит от QWizard::wizardStyle. Например, на macOS кнопка «Далее» называется «Продолжить».
См. также setButtonText(), QWizard::buttonText(), и QWizard::setButtonText().
[virtual] void QWizardPage::cleanupPage()
Эта виртуальная функция вызывается QWizard::cleanupPage() при переходе пользователя на другую страницу, нажав кнопку «Назад» (если не установлена опция QWizard::IndependentPages).
Реализация по умолчанию сбрасывает поля страницы до их первоначальных значений (значений, которые они имели до вызова initializePage()).
См. также QWizard::cleanupPage(), initializePage() и QWizard::IndependentPages.
[protected] QVariant QWizardPage::field(const QString &name) const
Возвращает значение поля с именем name.
Эта функция может использоваться для доступа к полям на любой странице мастера. Она эквивалентна вызову wizard()->field(name).
Пример:
void OutputFilesPage::initializePage()
{
QString className = field("className").toString();
headerLineEdit->setText(className.toLower() + ".h");
implementationLineEdit->setText(className.toLower() + ".cpp");
outputDirLineEdit->setText(QDir::toNativeSeparators(QDir::tempPath()));
} См. также QWizard::field(), setField() и registerField().
[virtual] void QWizardPage::initializePage()
Эта виртуальная функция вызывается QWizard::initializePage() для подготовки страницы перед её отображением в результате вызова QWizard::restart() или в результате нажатия пользователем на кнопку «Далее». (Однако, если установлена опция QWizard::IndependentPages, эта функция вызывается только при первом отображении страницы.)
Переопределяя эту функцию, вы можете убедиться, что поля страницы должным образом инициализированы на основе полей с предыдущих страниц. Например:
void OutputFilesPage::initializePage()
{
QString className = field("className").toString();
headerLineEdit->setText(className.toLower() + ".h");
implementationLineEdit->setText(className.toLower() + ".cpp");
outputDirLineEdit->setText(QDir::toNativeSeparators(QDir::tempPath()));
} Реализация по умолчанию ничего не делает.
См. также QWizard::initializePage(), cleanupPage() и QWizard::IndependentPages.
bool QWizardPage::isCommitPage() const
Возвращает true если эта страница — страница подтверждения; в противном случае возвращает false.
См. также setCommitPage().
[virtual] bool QWizardPage::isComplete() const
Эта виртуальная функция вызывается QWizard для определения, следует ли активировать кнопку «Далее» или «Готово».
Реализация по умолчанию возвращает true если все обязательные поля заполнены; в противном случае возвращает false.
Если вы переопределяете эту функцию, убедитесь, что испускается completeChanged() из остальной части вашей реализации всякий раз, когда значение isComplete() изменяется. Это гарантирует, что QWizard обновляет состояние своих кнопок. Пример переопределения представлен здесь.
См. также completeChanged() и isFinalPage().
bool QWizardPage::isFinalPage() const
Эта функция вызывается QWizard для определения, следует ли отображать кнопку «Готово» на этой странице.
По умолчанию она возвращает true если следующей страницы нет (т. е. nextId() возвращает -1); в противном случае возвращает false.
Явно вызвав setFinalPage(true), вы можете позволить пользователю выполнить «раннее завершение».
См. также isComplete() и QWizard::HaveFinishButtonOnEarlyPages.
[virtual] int QWizardPage::nextId() const
Эта виртуальная функция вызывается QWizard::nextId() для определения, какую страницу отобразить, когда пользователь нажимает кнопку «Далее».
Возвращаемое значение — ID следующей страницы или -1, если следующей страницы нет.
По умолчанию эта функция возвращает наименьший ID, больший, чем ID текущей страницы, или -1, если такого ID нет.
Переопределяя эту функцию, вы можете задать динамический порядок страниц. Например:
int IntroPage::nextId() const
{
if (evaluateRadioButton->isChecked()) {
return LicenseWizard::Page_Evaluate;
} else {
return LicenseWizard::Page_Register;
}
} См. также QWizard::nextId().
QPixmap QWizardPage::pixmap(QWizard::WizardPixmap which) const
Возвращает растровое изображение, заданное для роли which.
Растровые изображения также можно задать для всего мастера с помощью QWizard::setPixmap(), в этом случае они применяются ко всем страницам, которые не задают собственное растровое изображение.
См. также setPixmap(), QWizard::pixmap() и Элементы страницы мастера.
[protected] void QWizardPage::registerField(const QString &name, QWidget *widget, const char *property = nullptr, const char *changedSignal = nullptr)
Создаёт поле с именем name, связанное с заданным property данного widget. С этого момента это свойство становится доступным с помощью field() и setField().
Поля глобальны для всего мастера и упрощают доступ любой странице к информации, хранимой на другой странице, без необходимости размещения всей логики в QWizard или явного знания страниц друг о друге.
Если name оканчивается на звездочку (*), поле является обязательным. Когда на странице есть обязательные поля, кнопки Далее и/или Завершить активируются только после заполнения всех обязательных полей. Для этого необходимо указать changedSignal, чтобы сообщить QWizard о необходимости повторной проверки значения, хранящегося в обязательном поле.
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() |
Вы можете использовать QWizard::setDefaultProperty(), чтобы добавить записи в эту таблицу или переопределить существующие записи.
Для того чтобы считать поле "заполненным", QWizard просто проверяет, что его текущее значение не равно его исходному значению (значению, которое оно имело до вызова initializePage). Для QLineEdit также проверяется, что hasAcceptableInput() возвращает true, чтобы учитывать любой валидатор или маску.
QWizard's механизм обязательных полей предоставляется для удобства. Он может быть обойден путем переопределения QWizardPage::isComplete().
См. также field(), setField() и QWizard::setDefaultProperty().
void QWizardPage::setButtonText(QWizard::WizardButton which, const QString &text)
Устанавливает текст на кнопке which на значение text на этой странице.
По умолчанию, текст на кнопках зависит от QWizard::wizardStyle, но может быть переопределен для всего мастера с помощью QWizard::setButtonText().
См. также buttonText(), QWizard::setButtonText() и QWizard::buttonText().
void QWizardPage::setCommitPage(bool commitPage)
Устанавливает эту страницу как страницу действия, если commitPage равно true; в противном случае устанавливает её как обычную страницу.
Страница действия — это страница, представляющая действие, которое нельзя отменить, нажав Назад или Отмена.
Кнопка Выполнить заменяет кнопку Далее на странице действия. Нажатие этой кнопки просто вызывает QWizard::next(), точно так же, как нажатие Далее.
На странице, в которую осуществляется переход непосредственно со страницы действия, кнопка Назад отключена.
См. также isCommitPage().
[protected] void QWizardPage::setField(const QString &name, const QVariant &value)
Устанавливает значение поля с именем name на значение value.
Эта функция может быть использована для установки полей на любой странице мастера. Она эквивалентна вызову wizard()->setField(name, value).
См. также QWizard::setField(), field() и registerField().
void QWizardPage::setFinalPage(bool finalPage)
Явно устанавливает эту страницу как конечную, если finalPage равно true.
После вызова setFinalPage(true), isFinalPage() возвращает true и кнопка Завершить отображается (и активируется, если isComplete() возвращает true).
После вызова setFinalPage(false), isFinalPage() возвращает true если nextId() возвращает -1; в противном случае возвращает false.
См. также isFinalPage(), isComplete() и QWizard::HaveFinishButtonOnEarlyPages.
void QWizardPage::setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
Устанавливает пиктограмму для роли which на pixmap.
Пиктограммы используются QWizard при отображении страницы. Какие именно пиктограммы используются, зависит от стиля мастера.
Пиктограммы также могут быть установлены для всего мастера с помощью QWizard::setPixmap(), в этом случае они применяются ко всем страницам, которые не задают свою пиктограмму.
См. также pixmap(), QWizard::setPixmap() и Элементы страницы мастера.
[virtual] bool QWizardPage::validatePage()
Эта виртуальная функция вызывается QWizard::validateCurrentPage() при нажатии пользователем на Далее или Завершить для выполнения некоторой последней проверки. Если она возвращает true, отображается следующая страница (или мастер завершается); в противном случае текущая страница остается открытой.
По умолчанию, возвращает true.
В возможности, обычно лучше отключать кнопку Далее или Завершить (указав обязательные поля или переопределяя isComplete()), чем переопределять validatePage().
См. также QWizard::validateCurrentPage() и isComplete().
[protected] QWizard *QWizardPage::wizard() const
Возвращает мастера, связанного с этой страницей, или nullptr если эта страница еще не была вставлена в QWizard.
См. также QWizard::addPage() и QWizard::setPage().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qwizardpage.html