QWizardPage、QWizard

QWizardPage

一、描述

QWizard 代表一个向导。每个页面都是一个 QWizardPage。

Page 提供了五个可以重新实现以提供自定义行为的虚函数:

  • 当用户单击向导的 Next 按钮时,将调用 initializePage() 来初始化页面的内容。
  • 当用户单击向导的后退按钮时,将调用 cleanupPage() 以重置页面的内容。
  • validatePage() 在用户单击 Next Finish 时验证页面。如果用户输入了不完整或无效的信息,它通常用于显示错误消息。
  • nextId() 返回下一页的 ID。在创建非线性向导时很有用,它允许根据用户提供的信息进行不同的遍历路径。
  • 调用 isComplete() 来确定是否应启用或禁用 Next 和/或 Finish 按钮。如果重新实现 isComplete(),还要确保在完成状态更改时发出 completeChanged()。

通常,向导的 Next 按钮和 Finish 按钮是互斥的。如果 isFinalPage() 返回 true,则 Finish 可用;否则,Next 可用。默认情况下,isFinalPage() 仅在 nextId() 返回 -1 时为 true。如果想同时显示页面的 Next Final(让用户执行“提前完成”),请在该页面上调用 setFinalPage(true)。对于支持提前完成的向导,可能还需要在向导上设置 HaveNextButtonOnLastPage HaveFinishButtonOnEarlyPages 选项。

在许多向导中,页面内容可能会影响后续页面字段的默认值。为了方便页面之间的通信,QWizard 支持“字段(field)”机制,允许在页面上注册字段(例如,QLineEdit)并从任何页面访问其值。字段对整个向导是全局的,使任何单个页面都可以轻松访问另一个页面存储的信息,而无需将所有逻辑放入 QWizard 或让页面明确了解彼此。字段使用 registerField() 注册,并且可以随时使用 field() 和 setField() 访问。

二、属性成员

1、subTitle : QString

页面的副标题

副标题由 QWizard 显示,位于标题和实际页面之间。在 ClassicStyle 和 ModernStyle 中,必须使用副标题才能使标题出现。在 MacStyle 中,副标题显示为实际页面上方的文本标签。

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

2、title : QString

页面的标题。

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

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

三、成员函数

1、QWizardPage(QWidget *parent = nullptr)

构造具有给定父级的向导页面。

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

2、void completeChanged()

只要页面的完整状态(即 isComplete() 的值)发生变化,就会发出此信号。

如果重新实现 isComplete(),请确保在 isComplete() 的值更改时发出 completeChanged(),以确保 QWizard 更新其按钮的启用或禁用状态。

3、QString buttonText(QWizard::WizardButton which)

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

文本可使用 setButtonText() 或 QWizard::setButtonText() 设置。

默认情况下,按钮上的文本取决于 QWizard::wizardStyle。 例如,在 macOS 上,“下一步”按钮称为“继续”。

4、【virtual】 void cleanupPage()

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

默认实现将页面的字段(field)重置为其原始值(原始值是在调用 initializePage() 之前它们具有的值)。

5、【protected】 QVariant field(const QString &name)

返回名为 name 的字段的值。

此功能可用于访问向导任何页面上的字段。相当于调用 wizard()->field(name)。

     【protected】 void setField(const QString &name, const QVariant &value)

设置字段的值。

此功能可用于在向导的任何页面上设置字段。相当于调用 wizard()->setField(name, value)。

6、【virtual】 void initializePage()

此虚函数由 QWizard::initializePage() 调用,以在页面显示之前准备页面,或者作为调用 QWizard::restart() 的结果,或者作为用户单击 Next 按钮的结果。(但是,如果设置了 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()));
}

7、bool isCommitPage()

此页面是否提交页面。 

8、【virtual】 bool isComplete()

QWizard 调用此虚函数来确定是否应启用或禁用 Next Finish 按钮。

如果填写了所有必填字段,则默认实现返回 true;否则,它返回 false。

如果重新实现此函数,请确保在 isComplete() 的值发生变化时从其余的实现中发出 completeChanged()。这确保 QWizard 更新其按钮的启用或禁用状态。

9、bool isFinalPage()

QWizard 调用此函数来确定是否应为此页面显示 Finish 按钮。

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

通过显式调用 setFinalPage(true),可以让用户执行“提前完成”

10、【virtual】 int nextId()

这个虚函数由 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;
    }
}

11、QPixmap pixmap(QWizard::WizardPixmap which)

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

设置 QWizard 在显示页面时使用像素图。

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

12、void 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 重新检查强制字段存储的值。

常见的 Qt 小部件其子类无需指定属性或 changedSignal。下面是这些小部件:

可以使用 QWizard::setDefaultProperty() 将条目添加到此表或覆盖现有条目。

13、void setButtonText(QWizard::WizardButton which, const QString &text)

设置按钮上的文本。

14、void setCommitPage(bool commitPage)

如果 commitPage 为 true,则将此页面设置为提交页面;否则,将其设置为普通页面。

提交页面是表示无法通过单击“返回”或“取消”来撤消的操作的页面。

提交按钮替换提交页面上的 Next 按钮。

15、void setFinalPage(bool finalPage)

如果 finalPage 为 true,则显式将此页面设置为最终页面。

16、【virtual】bool validatePage()

当用户单击 Next Finish 以执行信息验证时,QWizard::validateCurrentPage() 调用此虚函数。 如果返回 true,则显示下一页(或向导结束); 否则,当前页面保持不变。

默认实现返回 true。

如果可能,禁用 Next Finish 按钮(通过指定必填字段或重新实现 isComplete())通常比重新实现 validatePage() 更好。

17、QWizard *wizard()

返回与此页面关联的向导。


QWizard

一、描述

向导是一种特殊类型的输入对话框,由一系列页面组成。向导的目的是引导用户逐步完成一个过程。

QWizard 继承 QDialog 并表示一个向导。每个页面都是一个 QWizardPage

1.1、一个简单的例子

以下示例说明了如何创建向导页面并将它们添加到向导。

#include <QApplication>
#include <QWizardPage>
#include <QLabel>
#include <QVBoxLayout>
#include <QLineEdit>

QWizardPage *createIntroPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle("介绍");

    QLabel *label = new QLabel("此向导将帮助您注册产品");
    label->setWordWrap(true);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(label);
    page->setLayout(layout);

    return page;
}

QWizardPage *createRegistrationPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle("注册");

    QLabel *label = new QLabel("注册码:");
    QLineEdit * lineEdit = new QLineEdit();

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(label);
    layout->addWidget(lineEdit);
    page->setLayout(layout);

    return page;
}

QWizardPage *createConclusionPage()
{
    QWizardPage *page = new QWizardPage;
    page->setTitle("完成");

    QLabel *label = new QLabel("注册完成");
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(label);
    page->setLayout(layout);

    return page;
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWizard wizard;
    wizard.addPage(createIntroPage());
    wizard.addPage(createRegistrationPage());
    wizard.addPage(createConclusionPage());

    wizard.setWindowTitle("Trivial Wizard");
    wizard.show();

    return app.exec();
}

1.2、向导的外观和感觉

QWizard 支持四种向导外观:

  • ClassicStyle
  • ModernStyle
  • MacStyle
  • AeroStyle

1.3、向导页面的元素

向导由一系列 QWizardPages 组成。在任何时候,只显示一页。一个页面具有以下属性:

  1. 标题(title
  2. 副标题(subTitle
  3. 一组像素图,是否会起作用取决于向导的风格(QWizard::WizardPixmap

enum QWizard::WizardPixmap

  • WatermarkPixmapClassicStyle ModernStyle 页面左侧的高像素图
  • LogoPixmapClassicStyle ModernStyle 页面标题右侧的小像素图
  • BannerPixmap:占据 ModernStyle 页眉背景的像素图
  • BackgroundPixmap:占据 MacStyle 向导背景的像素图

下图显示了 QWizard 如何呈现这些属性,假设它们都存在并且使用了 ModernStyle

如果向导的样式是 MacStyle,则页面看起来完全不同:

1.4、注册和使用字段

在许多向导中,页面内容可能会影响后续页面字段的默认值。为了方便页面之间的通信,QWizard 支持“字段”机制,允许在页面上注册字段并从任何页面访问其值。还可以指定必填字段(即,在用户进入下一页之前必须填写的字段)。

调用 QWizardPage::registerField() 注册字段。例如:

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 &macro"));

    registerField("className*", classNameLineEdit);
    registerField("baseClass", baseClassLineEdit);
    registerField("qobjectMacro", qobjectMacroCheckBox);
    ...
}

上面的代码注册了三个字段,className、baseClass和qobjectMacro,分别与三个子 widget 相关联。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 字段的内容。

当页面具有必填字段时,只有在填写了所有必填字段后,才会启用下一步和/或完成按钮。

QWizard 只需检查该字段的当前值是否不等于原始值(它在调用 initializePage() 时具有的值)。对于 QLineEditQAbstractSpinBox 子类,QWizard 还检查 hasAcceptableInput() 是否返回 true,以支持任何验证器或掩码。

QWizard 提供了的强制字段机制。一个更强大(但也更麻烦)的替代方法是重新实现 QWizardPage::isComplete() 并在页面变得完整或不完整时发出 QWizardPage::completeChanged() 信号。

Next 和/或 Finish 按钮的启用/禁用状态是对用户输入执行验证的一种方式。另一种方法是重新实现 validateCurrentPage()(或 QWizardPage::validatePage())以执行验证(如果用户输入了不完整或无效的信息,则显示错误消息)。如果函数返回 true,则显示 Next(或向导结束);否则,当前页面保持不变。

1.5、创建线性向导

大多数向导具有线性结构,第 1 页后跟第 2 页,以此类推,直到最后一页。使用 QWizard,通过实例化 QWizardPages 并使用 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())来用默认值填充页面。默认情况下,此函数什么都不做,但可以重新实现它以根据其他页面的字段初始化页面的内容。

如果用户按下 Back,则调用 cleanupPage()(它又调用 QWizardPage::cleanupPage())。默认实现将页面的字段重置为其原始值(在调用 initializePage() 之前它们具有的值)。如果希望后退按钮是非破坏性的并保留用户输入的值,只需启用 IndependentPages 选项。

1.6、创建非线性向导

一些向导更复杂,因为它们允许基于用户提供的信息的不同遍历路径。

在复杂的向导中,页面由 ID 标识。这些 ID 通常使用枚举定义。 例如:

class LicenseWizard : public QWizard
{
    ...
    enum { Page_Intro, 
           Page_Evaluate, 
           Page_Register, 
           Page_Details,
           Page_Conclusion };
    ...
};

页面是使用 setPage() 插入的,它接受一个 ID 和一个 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);
    ...
}

默认情况下,页面按 ID 递增顺序显示。为了提供取决于用户选择的选项的动态顺序,必须重新实现 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;
    }
}

要从具有最低 ID 的页面以外的另一个页面开始,请调用 setStartId()。

要测试页面是否已被访问,请调用 hasVisitedPage()。例如:

void ConclusionPage::initializePage()
{
    QString licenseText;

    if (wizard()->hasVisitedPage(LicenseWizard::Page_Evaluate)) {
        licenseText = tr("<u>评估许可协议:</u> "
                         "您可以使用此软件 30 天并进行一次备份,但不允许分发它。");
    } else if (wizard()->hasVisitedPage(LicenseWizard::Page_Details)) {
        licenseText = tr("<u>首次许可协议:</u> "
                         "您可以根据您将通过电子邮件收到的许可证来使用此软件。");
    } else {
        licenseText = tr("<u>升级许可协议:</u> "
                         "本软件根据您当前的许可条款获得许可。");
    }
    bottomLabel->setText(licenseText);
}

二、类型成员

1、enum QWizard::WizardButton:此枚举指定向导中的按钮:

  • BackButton:返回
  • NextButton:下一个
  • CommitButton:提交
  • FinishButton:完成
  • CancelButton:取消
  • HelpButton:帮助
  • CustomButton1:第一个用户定义按钮
  • CustomButton2:第二个用户自定义按钮
  • CustomButton3:第三个用户自定义按钮
  • Stretch:按钮布局中的水平拉伸,仅在调用 setButtonLayout() 时有用

2、enum QWizard::WizardOption:此枚举指定影响向导外观的各种选项:

  • IndependentPages:页面相互独立(即,它们不从彼此派生值)
  • IgnoreSubTitles:不显示子标题
  • ExtendedWatermarkPixmap:将 WatermarkPixmap 一直延伸到窗口边缘
  • NoDefaultButton:不要将 Next Finish 按钮设为对话框的默认按钮
  • NoBackButtonOnStartPage:不要在起始页上显示 Back 按钮
  • NoBackButtonOnLastPage:不要在最后一页显示 Back 按钮
  • DisabledBackButtonOnLastPage:禁用最后一页的 Back 按钮
  • HaveNextButtonOnLastPage:在最后一页上显示(禁用)Next 按钮
  • HaveFinishButtonOnEarlyPages:在非最终页面上显示(禁用)Finish 按钮
  • NoCancelButton:不显示取消按钮
  • CancelButtonOnLeft:将取消按钮放在 Back 的左侧(而不是 Finish Next 的右侧)
  • HaveHelpButton:显示帮助按钮
  • HelpButtonOnRight:将帮助按钮放在按钮布局的最右侧(而不是最左侧)
  • HaveCustomButton1:显示第一个用户定义按钮(CustomButton1
  • HaveCustomButton2:显示第二个用户定义按钮(CustomButton2
  • HaveCustomButton3:显示第三个用户定义按钮(CustomButton3
  • NoCancelButtonOnLastPage:不要在最后一页显示取消按钮

3、enum QWizard::WizardPixmap:此枚举指定可以与页面关联的像素图:

  • WatermarkPixmapClassicStyle ModernStyle 页面左侧的高像素图
  • LogoPixmapClassicStyleModernStyle 页面标题右侧的小像素图
  • BannerPixmap:占据 ModernStyle 页眉背景的像素图
  • BackgroundPixmap:占据 MacStyle 向导背景的像素图

4、enum QWizard::WizardStyle:此枚举指定了 QWizard 支持的不同外观:

  • ClassicStyle:经典 Windows 外观
  • ModernStyle:现代 Windows 外观
  • MacStyle:macOS 外观
  • AeroStyle:Windows Aero 外观

三、属性成员

1、【只读】currentId : const int

当前页面的ID。

2、options : WizardOptions

影响向导外观的各种选项。

3、startId : int

第一页的 ID。

如果未明确设置此属性,则默认为该向导中的最低页面 ID,如果尚未插入页面,则为 -1。

4、subTitleFormat : Qt::TextFormat

子标题使用的文本格式。默认为 Qt::AutoText

  • Qt::PlainText:纯文本字符串。
  • Qt::RichText:富文本字符串。
  • Qt::AutoText:自动检测。
  • Qt::MarkdownText:Markdown 格式的文本。

5、titleFormat : Qt::TextFormat

标题使用的文本格式。默认为 Qt::AutoText

6、wizardStyle : WizardStyle

向导的外观。

四、成员函数

1、void back()

返回上一页。相当于按下 Back 按钮。

      void next()

前进到下一页。

这相当于按下 Next Commit 按钮。 

2、【信号】void currentIdChanged(int id)

此信号在当前页面更改时发出,参数为新的当前 id。

3、【信号】void customButtonClicked(int which)

当用户单击自定义按钮时会发出此信号。可以是 CustomButton1CustomButton2 CustomButton3

4、【信号】void 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);
}

5、【信号】void pageAdded(int id)

每当向向导添加页面时都会发出此信号。页面的 id 作为参数传递。

     【信号】void pageRemoved(int id)

每当从向导中删除页面时都会发出此信号。页面的 id 作为参数传递。 

6、void restart()

在开始页面重新启动向导。显示向导时会自动调用此函数。

7、int addPage(QWizardPage *page)

添加页面到向导,并返回页面的 ID。该 ID 保证大于 QWizard 中的任何其他 ID。

8、QAbstractButton * button(QWizard::WizardButton which)

返回与角色 which 对应的按钮。

      void setButton(QWizard::WizardButton which, QAbstractButton *button)

设置按钮对应角色的按钮。

要向向导添加额外的按钮(例如,打印按钮),可以使用 CustomButton1 CustomButton3 调用 setButton(),并使用 HaveCustomButton1 HaveCustomButton3 选项使按钮可见。

      void setButtonLayout(const QList<QWizard::WizardButton> &layout)

将按钮显示的顺序设置为 layout。

默认布局取决于设置的选项(例如,是否 HelpButtonOnRight)。 如果需要比已经提供的选项更多地控制按钮的布局,则可以调用此函数。

可以使用 Stretch 在布局中指定水平拉伸。

MyWizard::MyWizard(QWidget *parent)
    : QWizard(parent)
{
    ...
    QList<QWizard::WizardButton> layout;
    layout << QWizard::Stretch << QWizard::BackButton << QWizard::CancelButton
           << QWizard::NextButton << QWizard::FinishButton;
    setButtonLayout(layout);
    ...
}

9、QString buttonText(QWizard::WizardButton which)

返回按钮上的文本。如果使用 setButtonText() 设置了文本,则返回该文本。

默认按钮上的文本取决于 wizardStyle。例如 在 macOS 上,“下一步”按钮称为“继续”。

      void setButtonText(QWizard::WizardButton which, const QString &text)

设置按钮上的文本。

也可以使用 QWizardPage::setButtonText() 在每页的基础上设置按钮文本。

10、void cleanupPage(int id)

这个虚函数被 QWizard 调用以在用户通过单击 Back 离开它之前清理页面 id(除非设置了 IndependentPages 选项)。

默认实现在 page(id) 上调用 QWizardPage::cleanupPage()。

 11、QWizardPage * currentPage()

返回指向当前页面的指针,如果没有当前页面(例如,在显示向导之前),则返回 nullptr。

这相当于调用 page(currentId())。

12、QVariant field(const QString &name)

返回名为 name 的字段的值。此功能可用于访问向导任何页面上的字段。

13、bool hasVisitedPage(int id)

返回页面历史记录是否包含页面 id。按 Back 将当前页面再次标记为“未访问”。

14、void initializePage(int id)

这个虚函数被 QWizard 调用以在页面 id 显示之前准备页面 id,或者作为调用 restart() 的结果,或者作为用户单击 Next 的结果。(但是,如果设置了 IndependentPages 选项,则仅在第一次显示页面时调用此函数。)

通过重新实现此功能,可以确保页面的字段根据之前页面的字段正确初始化。

默认实现在 page(id) 上调用 QWizardPage::initializePage()。

15、int nextId()

QWizard 调用这个虚函数来找出当用户单击 Next 按钮时要显示的页面。

返回值为下一页的 ID,如果没有后续页面,则返回 -1。

默认实现在 currentPage() 上调用 QWizardPage::nextId()。

通过重新实现此函数,可以指定动态页面顺序。

16、QWizardPage *page(int id)

返回具有给定 id 的页面。

17、QList<int> pageIds()

返回页面 ID 列表。

18、QPixmap pixmap(QWizard::WizardPixmap which)

返回为角色 which 设置的像素图。

19、void removePage(int id)

删除具有给定 id 的页面。

注意:删除页面可能会影响 startId 属性的值。

20、void setDefaultProperty(const char *className, const char *property, const char *changedSignal)

将 className 的默认属性设置为 property,并将关联的更改信号设置为 changedSignal。

当 className (或其子类之一)的实例传递给 QWizardPage::registerField() 并且未指定任何属性时,使用默认属性。

21、void setField(const QString &name, const QVariant &value)

将名为 name 的字段的值设置为 value。此功能可用于在向导的任何页面上设置字段。

22、void setOption(QWizard::WizardOption option, bool on = true)

如果 on 为true,则将给定选项设置为启用;否则,清除给定的选项。

       bool testOption(QWizard::WizardOption option)

是否启用了相应选项。

23、void setPage(int id, QWizardPage *page)

将给定页面添加到具有给定 ID 的向导。

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

设置角色的像素图设置为像素图。

也可以使用 QWizardPage::setPixmap() 为特定页面设置像素图。

25、void setSideWidget(QWidget *widget) / QWidget * sideWidget()

设置显示在向导的侧面小部件。对于使用 WatermarkPixmapClassicStyle ModernStyle)的样式,侧面小部件显示在水印顶部,对于其他样式,侧面小部件显示在向导的左侧。

默认情况下,不存在任何侧面小部件。

26、bool validateCurrentPage()

当用户单击 NextFinish 以执行验证时,QWizard 会调用此虚拟函数。如果返回 true,则显示下一页(或向导结束); 否则,当前页面保持不变。

默认实现在 currentPage() 上调用 QWizardPage::validatePage()。

如果可能,禁用 Next Finish 按钮(通过指定必填字段或通过重新实现 QWizardPage::isComplete())通常比重新实现 validateCurrentPage() 更好。

27、QList<int> visitedIds()

按照页面被访问的顺序返回已访问页面的 ID 列表。

  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值