QWizardPage 类

The QWizardPage class is the base class for wizard pages. More...

头文件 #include <QWizardPage>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承自 QWidget

属性

公共函数

QWizardPage(QWidget *parent = nullptr)
virtual~QWizardPage()
QStringbuttonText(QWizard::WizardButton which) const
virtual voidcleanupPage()
virtual voidinitializePage()
boolisCommitPage() const
virtual boolisComplete() const
boolisFinalPage() const
virtual intnextId() const
QPixmappixmap(QWizard::WizardPixmap which) const
voidsetButtonText(QWizard::WizardButton which, const QString &text)
voidsetCommitPage(bool commitPage)
voidsetFinalPage(bool finalPage)
voidsetPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
voidsetSubTitle(const QString &subTitle)
voidsetTitle(const QString &title)
QStringsubTitle() const
QStringtitle() const
virtual boolvalidatePage()

信号

保护函数

QVariantfield(const QString &name) const
voidregisterField(const QString &name, QWidget *widget, const char *property = nullptr, const char *changedSignal = nullptr)
voidsetField(const QString &name, const QVariant &value)
QWizard *wizard() const

详细信息

QWizard 表示向导。每个页面是一个 QWizardPage。当你创建自己的向导时,你可以直接使用 QWizardPage,或者你可以对其进行子类化以获得更多控制。

页面有以下属性,由QWizard渲染:一个标题,一个子标题,以及一组位图。有关详细信息,请参阅向导页面元素。一旦页面被添加到向导中(使用QWizard::addPage()或QWizard::setPage()),wizard()将返回关联的QWizard对象指针。

页面提供了五个虚拟函数,这些函数可以被重写以提供自定义行为

  • initializePage()在用户点击向导的下一步按钮时调用来初始化页面的内容。如果您想从用户在前几页输入的内容中派生页面的默认值,则需要重写此函数。
  • cleanupPage()在用户点击向导的后退按钮时调用来重置页面的内容。
  • validatePage()在用户点击下一步完成时验证页面。它通常用于在用户输入了不完整或无效信息时显示错误消息。
  • nextId()返回下一页的ID。这在创建非线性向导时很有用,根据用户提供的详细信息允许不同的遍历路径。
  • isComplete()调用以确定下一步和/或完成按钮是否应启用或禁用。如果重写isComplete(),请确保在完整性状态更改时发出completeChanged()。

通常,向导的下一步按钮和完成按钮是互斥的。如果isFinalPage()返回true,则完成可用;否则,下一步可用。默认情况下,isFinalPage()只在nextId()返回-1时为真。如果您想在一个页面上同时显示下一步最终(允许用户执行“早期完成”),请调用该页上的setFinalPage(true)。对于支持早期完成的向导,您可能还希望在向导上设置HaveNextButtonOnLastPageHaveFinishButtonOnEarlyPages选项。

在许多向导中,一个页面的内容可能影响稍后页面的字段默认值。为了便于页面之间的通信,QWizard支持一个"字段"机制,允许您在页面上注册一个字段(例如,一个QLineEdit),并从任何页面访问其值。字段在向导的全局范围内,使得任何单个页面都可以访问其他页面存储的信息,无需在QWizard中放置所有逻辑,或者让页面显式了解彼此。字段通过registerField()注册,并可以使用field()和setField()在任何时候访问。

另请参阅QWizard简单向导示例许可向导示例

属性文档

subTitle : QString

此属性持有页面的子标题

副标题由QWizard显示,位于标题和实际页面之间。副标题是可选的。在ClassicStyleModernStyle中,使用副标题是使标题出现所必需的。在MacStyle中,副标题显示为实际页面上方的一个文本标签。

副标题可以是纯文本或HTML,具体取决于QWizard::subTitleFormat属性的值。

默认情况下,此属性包含一个空字符串。

访问函数

QStringsubTitle() const
voidsetSubTitle(const QString &subTitle)

另请参阅标题QWizard::IgnoreSubTitles向导页面的元素

title : QString

此属性包含页面的标题

标题由QWizard显示,位于实际页面上方。所有页面都应该有标题。

标题可以是纯文本或HTML,取决于QWizard::titleFormat属性的值。

默认情况下,此属性包含一个空字符串。

访问函数

QStringtitle() const
voidsetTitle(const QString &title)

另请参阅副标题向导页面的元素

成员函数文档

[明确] QWizardPage::QWizardPage(QWidget *parent = nullptr)

使用给定的parent构建向导页面。

当页面使用QWizard::addPage()或QWizard::setPage()插入到向导中时,父对象会自动设置为向导。

另请参阅向导

[虚拟 noexcept] QWizardPage::~QWizardPage()

析构函数。

QString QWizardPage::buttonText(QWizard::WizardButton which) const

返回此页面上按钮which上的文本。

如果使用了setButtonText设置文本,则返回此文本。如果没有,如果使用了QWizard::setButtonText设置文本,则返回此文本。

默认情况下,按钮上的文本取决于QWizard::wizardStyle。例如,在macOS上,Next按钮称为Continue

另请参阅setButtonTextQWizard::buttonTextQWizard::setButtonText

[虚拟] void QWizardPage::cleanupPage()

当用户通过单击Back离开页面时(除非设置了QWizard::IndependentPages选项),由QWizard::cleanupPage()调用此虚拟函数。

默认情况下,此实现将页面字段重置为其原始值(在调用initializePage()之前具有的值)。

另请参阅 QWizard::cleanupPage(),initializePage()以及QWizard::IndependentPages

[信号] void QWizardPage::completeChanged()

每当页面的完成状态(即isComplete的值)发生变化时,都会发出此信号。

如果你重写了isComplete,确保在isComplete的值发生变化时发出completeChanged(),以确保QWizard更新其按钮的启用和禁用状态。

另请参阅isComplete

[保护] QVariant QWizardPage::field(const QString &name) const

返回名为name的字段值。

此函数可以用于访问任意页面的字段。它等同于调用QWizard::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::fieldsetFieldregisterField

[虚函数] void QWizardPage::initializePage()

此虚拟函数由QWizard::initializePage()调用,以便在以下情况下准备页面:在调用QWizard::restart()之后,或用户点击下一步按钮。然而,如果设置了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::initializePagecleanupPageQWizard::IndependentPages

bool QWizardPage::isCommitPage() const

如果这是一个提交页面,则返回true;否则返回false

另请参阅setCommitPage

[虚函数] bool QWizardPage::isComplete() const

此虚拟函数由QWizard调用,以确定是否启用或禁用下一步完成按钮。

默认实现在某些强制字段被填写时返回true;否则返回false

如果你重写此函数,确保从你的实现的其他部分发出completeChanged,这样QWizard就能更新按钮的启用或禁用状态。一个重写的示例在此处:这里

另请参阅completeChanged()和isFinalPage

bool QWizardPage::isFinalPage() const

此函数由 QWizard 调用,以确定是否应为此页面显示 完成 按钮。

默认情况下,如果没有下一页(即 nextId() 返回 -1),则返回 true;否则,返回 false

通过显式调用 setFinalPage(true),您可以允许用户执行“早期完成”。

另请参阅isComplete() 和 QWizard::HaveFinishButtonOnEarlyPages

[虚拟] int QWizardPage::nextId() const

此虚拟函数由 QWizard::nextId() 调用,以找到当用户点击 下一步 按钮时应显示的页面。

返回值是下一页的 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() 和向导页面元素

[保护的] 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 小部件。对于这些(或它们的子类),您不需要指定 propertychangedSignal。以下表格列出了这些小部件

可以使用 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,则将此页设置为提交页;否则,将其设置为普通页。

提交页表示的动作不能通过点击 后退取消 来撤销。

提交按钮替换了提交页上的 下一步 按钮单击此按钮相当于单击 下一步

直接从提交页进入的页将 后退 按钮禁用。

另请参阅 isCommitPage()。

[受保护的] 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) 后,如果 nextId() 返回 -1,则 isFinalPage() 返回 true;否则,返回 false

参见 isFinalPage(),isComplete() 和 QWizard::HaveFinishButtonOnEarlyPages

void QWizardPage::setPixmap(QWizard::WizardPixmap which,const QPixmap &pixmap)

设置角色 which 的精灵为 pixmap

精灵由 QWizard 在显示页面时使用。实际使用的精灵取决于 向导样式

还可以使用 QWizard::setPixmap() 为整个向导程序设置位图,在这种情况下,它们应用于所有未指定位图的页面。

参见 pixmap(),QWizard::setPixmap() 和 向导页面元素

[虚函数] bool QWizardPage::validatePage()

当用户点击 下一步完成 时,此虚函数由 QWizard::validateCurrentPage() 调用以进行一些最后的验证。如果返回 true,则显示下一页(或向导完成);否则,当前页面保持显示。

默认实现返回 true

通常,禁用 下一步完成 按钮(通过指定 必填字段 或重写 isComplete())比重写 validatePage() 更好的风格。

参见 QWizard::validateCurrentPage() 和 isComplete

[保护] QWizard *QWizardPage::wizard() const

返回与此页面关联的向导,如果此页面尚未插入到 QWizard 中,则返回 nullptr

参见 QWizard::addPage() 和 QWizard::setPage

© 2024 Qt公司有限公司。本文档中包含的文档贡献是各自所有者的版权。提供的文档根据自由的软件基金会的GNU自由文档许可证版本1.3的条款进行许可。Qt和相关标志是芬兰的Qt公司及其在全球的子公司和分支机构的注册商标。所有其他商标都是各自所有者的财产。