QWizardPage Class
QWizardPage 类是向导页面的基类。更多
头文件: | #include <QWizardPage> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) 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 。详情请参见Elements of a Wizard Page 。一旦页面被添加到向导中(使用QWizard::addPage() 或QWizard::setPage() ),wizard() 将返回一个指向相关QWizard 对象的指针。
Page 提供了五个虚拟函数,可以通过重新实现这些函数来提供自定义行为:
- initializePage当用户点击向导的Next 按钮时,调用 () 来初始化页面内容。如果要根据用户在以前页面上输入的内容推导出页面的默认值,则需要重新实现该函数。
- cleanupPage当用户点击向导的Back 按钮时,调用 () 重置页面内容。
- validatePage() 会在用户点击Next 或Finish 时验证页面。如果用户输入的信息不完整或无效,该函数通常会显示错误信息。
- nextId() 返回下一页的 ID。它在creating non-linear wizards 时非常有用,可以根据用户提供的信息显示不同的遍历路径。
- isComplete调用 () 可确定是否启用Next 和/或Finish 按钮。如果重新实现isComplete(),还需确保在完整状态发生变化时发出completeChanged()。
通常,向导的Next 按钮和Finish 按钮是互斥的。如果isFinalPage() 返回true
,则Finish 可用;否则,Next 可用。默认情况下,只有当nextId() 返回 -1 时,isFinalPage() 才为真。如果要在一个页面上同时显示Next 和Final (让用户执行 "提前结束"),请在该页面上调用setFinalPage(true)。对于支持提前结束的向导,可能还需要在向导上设置HaveNextButtonOnLastPage 和HaveFinishButtonOnEarlyPages 选项。
在许多向导中,页面内容可能会影响后面页面字段的默认值。为了方便页面之间的通信,QWizard 支持"field" mechanism ,允许你在页面上注册一个字段(如QLineEdit ),并从任何页面访问它的值。字段对整个向导来说是全局的,任何一个页面都可以轻松访问另一个页面存储的信息,而不必将所有逻辑都放在QWizard 中,也不必让页面明确了解彼此。字段使用registerField() 注册,可随时使用field() 和setField() 访问。
属性文档
subTitle : QString
该属性包含页面的副标题
字幕通过QWizard 显示,位于标题和实际页面之间。字幕是可选的。在ClassicStyle 和ModernStyle 中,必须使用字幕才能显示页眉。在MacStyle 中,字幕以文本标签的形式显示在实际页面的正上方。
字幕可以是纯文本或 HTML,具体取决于QWizard::subTitleFormat 属性的值。
默认情况下,该属性包含一个空字符串。
访问功能:
QString | subTitle() const |
void | setSubTitle(const QString &subTitle) |
另请参阅 title,QWizard::IgnoreSubTitles, 和Elements of a Wizard Page 。
title : QString
该属性包含页面标题
标题通过QWizard 显示在实际页面的上方。所有页面都应有一个标题。
标题可以是纯文本或 HTML,具体取决于QWizard::titleFormat 属性的值。
默认情况下,该属性包含一个空字符串。
访问功能:
QString | title() const |
void | setTitle(const QString &title) |
另请参阅 subTitle 和Elements of a Wizard Page 。
成员函数文档
[explicit]
QWizardPage::QWizardPage(QWidget *parent = nullptr)
用给定的parent 构建向导页面。
当使用QWizard::addPage() 或QWizard::setPage() 将页面插入向导时,父级页面会自动设置为向导。
另请参阅 wizard() 。
[virtual noexcept]
QWizardPage::~QWizardPage()
毁灭者
QString QWizardPage::buttonText(QWizard::WizardButton which) const
返回本页which 按钮上的文本。
如果使用setButtonText() 设置了文本,则返回此文本。否则,如果使用QWizard::setButtonText() 设置了文本,则返回此文本。
默认情况下,按钮上的文本取决于QWizard::wizardStyle 。例如,在 macOS 上,Next 按钮称为Continue 。
另请参阅 setButtonText()、QWizard::buttonText() 和QWizard::setButtonText()。
[virtual]
void QWizardPage::cleanupPage()
当用户点击Back 离开页面时(除非设置了QWizard::IndependentPages 选项),QWizard::cleanupPage() 将调用此虚函数。
默认实现是将页面字段重置为原始值(调用initializePage() 之前的值)。
另请参阅 QWizard::cleanupPage()、initializePage() 和QWizard::IndependentPages 。
[signal]
void QWizardPage::completeChanged()
只要页面的完整状态(即isComplete() 的值发生变化,就会发出该信号。
如果重新实现isComplete(),请确保在isComplete() 的值发生变化时发出 completeChanged(),以确保QWizard 更新其按钮的启用或禁用状态。
另请参阅 isComplete()。
[protected]
QVariant QWizardPage::field(const QString &name) const
返回name 字段的值。
该函数可用于访问向导任何页面上的字段。它等同于调用wizard()->field(name).
示例:
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 sent to %1.").arg(emailAddress);
另请参阅 QWizard::field()、setField() 和registerField()。
[virtual]
void QWizardPage::initializePage()
该虚拟函数由QWizard::initializePage() 调用,用于在调用QWizard::restart() 或用户点击Next 后显示页面之前为页面做好准备(不过,如果设置了QWizard::IndependentPages 选项,则只有在首次显示页面时才会调用该函数)。
通过重新实现该函数,可以确保页面字段根据之前页面的字段正确初始化。例如
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)) { 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 sent to %1.").arg(emailAddress); } else { licenseText = tr("<u>Upgrade License Agreement:</u> " "This software is licensed under the terms of your " "current license."); } bottomLabel->setText(licenseText); }
默认实现不执行任何操作。
另请参见 QWizard::initializePage()、cleanupPage() 和QWizard::IndependentPages 。
bool QWizardPage::isCommitPage() const
如果此页面是提交页面,则返回true
;否则返回false
。
另请参阅 setCommitPage() 。
[virtual]
bool QWizardPage::isComplete() const
QWizard 调用此虚函数,以确定应启用还是禁用Next 或Finish 按钮。
如果mandatory fields 全部填满,默认实现将返回true
;否则,将返回false
。
如果重新实现此函数,请确保每当 isComplete() 的值发生变化时,从实现的其他部分发出completeChanged()。这将确保QWizard 更新按钮的启用或禁用状态。这里有一个重新实现的示例。
另请参见 completeChanged() 和isFinalPage()。
bool QWizardPage::isFinalPage() const
QWizard 调用此函数,以确定是否应显示此页面的Finish 按钮。
默认情况下,如果没有下一页,则返回true
(即nextId() 返回-1);否则,返回false
。
通过显式调用setFinalPage(true),可以让用户执行 "提前结束"。
另请参阅 isComplete() 和QWizard::HaveFinishButtonOnEarlyPages 。
[virtual]
int QWizardPage::nextId() const
QWizard::nextId() 调用此虚函数,以确定当用户点击Next 按钮时应显示哪个页面。
返回值是下一页的 ID,如果后面没有页面,则返回-1。
默认情况下,该函数返回大于当前页面 ID 的最小 ID,如果没有该 ID,则返回-1。
通过重新实现该函数,可以指定动态页面顺序。例如
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() 和Elements of a Wizard Page 。
[protected]
void QWizardPage::registerField(const QString &name, QWidget *widget, const char *property = nullptr, const char *changedSignal = nullptr)
创建一个名为name 的字段,该字段与给定widget 的给定property 相关联。此后,就可以使用field() 和setField() 访问该属性。
字段对整个向导来说是全局的,任何一个页面都可以轻松访问另一个页面存储的信息,而不必将所有逻辑都放在QWizard 中,也不必让页面明确知道彼此。
如果name 以星号 (*
) 结尾,则该字段为必填字段。当页面有必填字段时,只有当所有必填字段都填满后,才会启用Next 和/或Finish 按钮。这就需要指定changedSignal ,以告诉QWizard 重新检查必填字段存储的值。
QWizard 了解最常见的 Qt Widget。对于这些部件(或其子类),您无需指定 或 。下表列出了这些部件:property changedSignal
您可以使用QWizard::setDefaultProperty() 向该表添加条目或覆盖现有条目。
要将一个字段视为 "已填充",QWizard 只需检查其当前值是否等于其原始值(调用initializePage() 之前的值)。对于QLineEdit ,它还会检查hasAcceptableInput() 是否返回 true,以尊重任何验证器或掩码。
QWizard强制字段机制是为方便起见而提供的。可以通过重新实现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,则将此页面设置为提交页面;否则,将其设置为普通页面。
提交页面是指无法通过点击Back 或Cancel 撤销操作的页面。
Commit 按钮取代了提交页面上的Next 按钮。单击该按钮只需调用QWizard::next() 就像单击Next 一样。
从提交页面直接输入的页面将禁用Back 按钮。
另请参见 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
,并且Finish 按钮可见(如果isComplete() 返回 true,则启用 按钮)。
调用 setFinalPage(false) 后,如果nextId() 返回-1,则isFinalPage() 返回true
;否则,返回false
。
另请参阅 isFinalPage()、isComplete() 和QWizard::HaveFinishButtonOnEarlyPages 。
void QWizardPage::setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
将角色which 的像素图设置为pixmap 。
QWizard 在显示页面时会使用像素图。实际使用的像素图取决于wizard style 。
也可以使用QWizard::setPixmap() 为整个向导设置像素图,在这种情况下,像素图适用于所有未指定像素图的页面。
另请参阅 pixmap(),QWizard::setPixmap() 和Elements of a Wizard Page 。
[virtual]
bool QWizardPage::validatePage()
当用户点击Next 或Finish 进行最后的验证时,QWizard::validateCurrentPage() 将调用此虚函数。如果返回true
,则显示下一页(或向导结束);否则,当前页保持不变。
默认实现返回true
。
在可能的情况下,禁用Next 或Finish 按钮(通过指定mandatory fields 或重新实现isComplete() )通常比重新实现 validatePage() 更好。
另请参阅 QWizard::validateCurrentPage() 和isComplete()。
[protected]
QWizard *QWizardPage::wizard() const
返回与本页相关的向导,如果本页尚未插入QWizard ,则返回nullptr
。
另请参阅 QWizard::addPage() 和QWizard::setPage()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.