QWizard类

QWizard类提供了向导的框架。 更多...

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

公共类型

枚举WizardButton { 返回按钮, 下一步按钮, 提交按钮, 完成按钮, 取消按钮, …, 拉伸 }
枚举WizardOption { 独立页面, 忽略副标题, 扩展水印位图, 无默认按钮, 起始页面无后退按钮, …, 最后一页无取消按钮 }
旗帜WizardOptions
枚举WizardPixmap { 水印位图, 标志位图, 标题位图, 背景位图 }
枚举WizardStyle { 经典样式, 现代样式, 苹果样式, 雀巢样式 }

属性

公共函数

QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
虚拟的~QWizard()
intaddPage(QWizardPage *page)
QAbstractButton *button(QWizard::WizardButton which) const
QStringbuttonText(QWizard::WizardButton which) const
intcurrentId() const
QWizardPage *currentPage() const
QVariantfield(const QString &name) const
boolhasVisitedPage(int id) const
虚拟 intnextId() const
QWizard::WizardOptionsoptions() const
QWizardPage *page(int id) const
QList<int>pageIds() const
QPixmappixmap(QWizard::WizardPixmap which) const
voidremovePage(int id)
voidsetButton(QWizard::WizardButton which, QAbstractButton *button)
voidsetButtonLayout(const QList<QWizard::WizardButton> &layout)
voidsetButtonText(QWizard::WizardButton which, const QString &text)
voidsetDefaultProperty(const char *className, const char *property, const char *changedSignal)
voidsetField(const QString &name, const QVariant &value)
voidsetOption(QWizard::WizardOption option, bool on = true)
voidsetOptions(QWizard::WizardOptions options)
voidsetPage(int id, QWizardPage *page)
voidsetPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
voidsetSideWidget(QWidget *widget)
voidsetStartId(int id)
voidsetSubTitleFormat(Qt::TextFormat format)
voidsetTitleFormat(Qt::TextFormat format)
voidsetWizardStyle(QWizard::WizardStyle style)
QWidget *sideWidget() const
intstartId() const
Qt::TextFormatsubTitleFormat() const
booltestOption(QWizard::WizardOption option) const
Qt::TextFormattitleFormat() const
virtual boolvalidateCurrentPage()
QList<int>visitedIds() const
QWizard::WizardStylewizardStyle() const

重写的公共函数

virtual voidsetVisible(bool visible) override
virtual QSizesizeHint() const override

公共槽函数

voidback()
voidnext()
voidrestart()
voidsetCurrentId(int id)

信号

voidcurrentIdChanged(int id)
voidcustomButtonClicked(int which)
voidhelpRequested()
voidpageAdded(int id)
voidpageRemoved(int id)

受保护的函数

virtual voidcleanupPage(int id)
virtual voidinitializePage(int id)

重写的受保护函数

virtual voiddone(int result) override
virtual boolevent(QEvent *event) override
virtual boolnativeEvent(const QByteArray &eventType, void *message, qintptr *result) override
virtual voidpaintEvent(QPaintEvent *event) override
virtual voidresizeEvent(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() 明确设置要使用的外观(例如,如果您希望在所有平台上使用相同的样式)。

注意:只有启用了透明合成的Windows Vista系统上,Aero样式 才会有效。如果不满足此条件,则使用 现代样式 作为后备。

除了向导样式之外,还有一些可控制向导外观和感觉的选项。可以使用 setOption() 或 setOptions() 设置这些选项。例如,HaveHelpButton 使 QWizard 底图中显示一个“帮助”按钮以及其他向导按钮。

您甚至可以使用 setButtonLayout() 更改向导按钮的顺序为任意顺序,并且可以向按钮行添加最多三个自定义按钮(例如,一个 打印 按钮)。这是通过调用 setButton() 或 setButtonText() 并使用 CustomButton1CustomButton2CustomButton3 来设置按钮,并通过启用HaveCustomButton1HaveCustomButton2HaveCustomButton3 选项来实现的。用户单击自定义按钮时,将触发 customButtonClicked()。例如

        wizard()->setButtonText(QWizard::CustomButton1, tr("&Print"));
        wizard()->setOption(QWizard::HaveCustomButton1, true);
        connect(wizard(), &QWizard::customButtonClicked,
                this, &ConclusionPage::printButtonClicked);

向导页面元素

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

以下图表显示了QWizard如何渲染这些属性,假设它们都存在并且使用 ModernStyle 视图

设置 副标题 时,QWizard 将其显示在标题中,在这种情况下,它还会使用 BannerPixmapLogoPixmap 来装饰标题。在标题下方显示水印。底部有一排按钮,允许用户浏览页面。

页面本身(QWizardPage 小部件)占据标题、水印和按钮行之间的区域。通常,页面是一个带有 QGridLayoutQWizardPage,其中包含标准子小部件(QLabelQLineEdit 等)。

如果向导的样式是 MacStyle,页面看起来将有很大不同

水印、横幅和标志位图在 MacStyle 下会被忽略。如果设置了 BackgroundPixmap,它将用作向导的背景;否则,将使用默认的 "assistant" 图像。

标题和副标题通过分别在各个页面上调用 QWizardPage::setTitle() 和 QWizardPage::setSubTitle() 来设置。它们可以是纯文本或HTML(参见 titleFormatsubTitleFormat)。可以使用 setPixmap() 在全局范围内为整个向导设置位图,或者使用 QWizardPage::setPixmap() 在每页的基础上设置位图。

注册和使用字段

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

要注册一个字段,请调用 QWizardPage::registerField 字段。例如

    registerField("evaluate.name*", nameLineEdit);
    registerField("evaluate.email*", emailLineEdit);

上述代码注册了三个字段,classNamebaseClassqobjectMacro,它们分别与三个子小部件关联。className 旁边带星号(*)表示必填字段。

任何页面的字段都可以从任何其他页面访问。例如

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);
}

在此,我们调用 QWizardPage::field() 来访问 details.email 字段的内容(该字段在 DetailsPage 中定义)并使用它来初始化 ConclusionPage。字段的内容以 QVariant 形式返回。

当使用 QWizardPage::registerField 创建字段时,我们传递一个唯一的字段名和一个小部件。我们还可以提供 Qt 属性名和一个“已更改”的信号(当属性更改时发出的信号)作为第三个和第四个参数;但是,对于最常用的 Qt 小部件,如 QLineEditQCheckBoxQComboBox,这不是必需的,因为 QWizard 已知的查找哪些属性。

如果在注册属性时在名称后面附加星号(*),则该字段是 必填字段。当一个页面上有必填字段时,下一个和/或完成按钮只在没有必填字段时才启用。

要认为一个字段已被“填充”,QWizard 会简单地检查字段当前值是否与原始值(即在调用initializePage() 时拥有的值)不相等。对于 QLineEditQAbstractSpinBox 子类,QWizard 还会检查 hasAcceptableInput() 返回 true,以遵守任何验证器或掩码。

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

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

创建线性向导

大多数向导都具有线性结构,从页1开始,然后是页2,依此类推,直到最后一页。例如,Trivial Wizard示例就是这样一种向导。使用QWizard,通过实例化QWizardPage并使用addPage()插入它们来创建线性向导。默认情况下,页面按添加的顺序显示。例如

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

当页面即将显示时,QWizard调用initializePage()(该函数随后调用QWizardPage::initializePage())以填充页面为默认值。默认情况下,此函数什么都不做,但可以重新实现它,根据其他页面的字段初始化页面内容(参见上面的示例)。

如果用户按下Back,则调用cleanupPage()(该函数随后调用QWizardPage::cleanupPage()). 默认实现将页面的字段重置为其原始值(在调用initializePage()之前它们具有的值)。如果要使Back按钮为非破坏性并保留用户输入的值,请简单地启用IndependentPages选项。

创建非线性向导

某些向导更复杂,允许根据用户提供的信息选择不同的遍历路径。例如,License Wizard示例就说明了这一点。它提供五个向导页面;根据选定的选项,用户可以到达不同的页面。

在复杂向导中,页面通过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>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);
}

另请参阅QWizardPageTrivial Wizard 示例License Wizard 示例

成员类型文档

枚举 QWizard::WizardButton

该枚举指定向导中的按钮。

常量描述
QWizard::BackButton0Back按钮(macOS 上的Go Back
QWizard::NextButton1Next按钮(macOS 上的Continue
QWizard::CommitButton2Commit按钮
QWizard::FinishButton3Finish按钮(macOS 上的Done
QWizard::CancelButton4取消”按钮(参见无取消按钮
QWizard::HelpButton5帮助”按钮(参见包含帮助按钮
QWizard::CustomButton16第一个用户自定义按钮(参见包含自定义按钮1
QWizard::CustomButton27第二个用户自定义按钮(参见包含自定义按钮2
QWizard::CustomButton38第三个用户自定义按钮(参见包含自定义按钮3

以下值仅在调用setButtonLayout()时才有用

常量描述
QWizard::Stretch9按钮布局中的水平拉伸

参见setButton(设置按钮)、setButtonText(设置按钮文本)、setButtonLayout(设置按钮布局)以及customButtonClicked(自定义按钮点击)。

enum QWizard::WizardOption
flags QWizard::WizardOptions

该枚举指定了各种影响向导外观和感觉的选项。

常量描述
QWizard::IndependentPages0x00000001页面彼此独立(即,它们不互相推导值)。
QWizard::IgnoreSubTitles0x00000002即使设置过,也不要显示任何子标题。
QWizard::ExtendedWatermarkPixmap0x00000004扩展任何WatermarkPixmap到窗口边缘。
QWizard::NoDefaultButton0x00000008不要将下一步完成按钮设置为对话框的默认按钮
QWizard::NoBackButtonOnStartPage0x00000010不在起始页上显示后退按钮。
QWizard::NoBackButtonOnLastPage0x00000020不在最后一页上显示后退按钮。
QWizard::DisabledBackButtonOnLastPage0x00000040禁用最后一页上的后退按钮。
QWizard::HaveNextButtonOnLastPage0x00000080在最后一页上显示(禁用的)下一步按钮。
QWizard::HaveFinishButtonOnEarlyPages0x00000100在非最终页上显示(禁用的)完成按钮。
QWizard::NoCancelButton0x00000200不显示取消按钮。
QWizard::CancelButtonOnLeft0x00000400取消按钮放在后退按钮的左侧(而不是放在完成下一步按钮的右侧)。
QWizard::HaveHelpButton0x00000800显示帮助按钮。
QWizard::HelpButtonOnRight0x00001000帮助按钮放在按钮布局的最右侧(而不是最左侧)。
QWizard::HaveCustomButton10x00002000显示第一个用户自定义按钮(CustomButton1)。
QWizard::HaveCustomButton20x00004000显示第二个用户自定义按钮(CustomButton2)。
QWizard::HaveCustomButton30x00008000显示第三个用户自定义按钮(CustomButton3)。
QWizard::NoCancelButtonOnLastPage0x00010000在最后一页上不显示取消按钮。

WizardOptions类型是QFlags<WizardOption>类型的别名。它存储了WizardOption值的或组合。

参见setOptions(设置选项)、setOption(设置选项)以及testOption(测试选项)。

enum QWizard::WizardPixmap

此枚举指定可以与页面关联的位图。

常量描述
QWizard::WatermarkPixmap0ClassicStyleModernStyle页的左侧的高位图
QWizard::LogoPixmap1ClassicStyleModernStyle页标题右侧的小位图
QWizard::BannerPixmap2填充ModernStyle页标题背景的位图
QWizard::BackgroundPixmap3填充MacStyle向导背景的位图

另请参阅 setPixmap(),QWizardPage::setPixmap()以及向导页元素.

enum QWizard::WizardStyle

此枚举指定由QWizard支持的不同的外观。

常量描述
QWizard::ClassicStyle0经典Windows外观
QWizard::ModernStyle1现代Windows外观
QWizard::MacStyle2macOS外观
QWizard::AeroStyle3Windows Aero外观

另请参阅 setWizardStyle(),WizardOption向导外观和感觉.

属性说明

currentId : int

此属性保存当前页面的ID。

此属性不能直接设置。要更改当前页面,请调用next(),back()或restart()。

默认情况下,此属性值为-1,表示没有显示页面。

访问函数

intcurrentId() const
voidsetCurrentId(int id)

通知信号

voidcurrentIdChanged(int id)

另请参阅 currentPage().

options : WizardOptions

此属性保存影响向导外观和感觉的各个选项。

默认情况下,以下选项已设置(取决于平台)

访问函数

QWizard::WizardOptionsoptions() const
voidsetOptions(QWizard::WizardOptions options)

另请参阅 wizardStyle.

startId : int

此属性保存第一个页面的ID。

如果没有显式设置此属性,则默认值为此向导中最低的页面ID,或者如果没有插入页面,则为-1。

访问函数

intstartId() const
voidsetStartId(int id)

另请参阅 restart()和nextId().

subTitleFormat : Qt::TextFormat

此属性保存页面副标题使用的文本格式。

默认格式是Qt::AutoText

访问函数

Qt::TextFormatsubTitleFormat() const
voidsetSubTitleFormat(Qt::TextFormat format)

另请参阅 QWizardPage::titletitleFormat.

titleFormat : Qt::TextFormat

此属性保存页面标题所使用的文本格式。

默认格式是Qt::AutoText

访问函数

Qt::TextFormattitleFormat() const
voidsetTitleFormat(Qt::TextFormat format)

参见 QWizardPage::titlesubTitleFormat

wizardStyle : WizardStyle

此属性保存向导的外观和感觉。

默认情况下,如果Windows Vista系统启用了alpha合成,则QWizard使用的是AeroStyle,无论当前小部件样式如何。如果不是这样,则默认向导样式取决于当前小部件样式,如下所示:MacStyle是如果当前小部件样式是QMacStyle,ModernStyle是如果当前小部件样式是QWindowsStyle,而在所有其他情况下,默认风格是ClassicStyle

访问函数

QWizard::WizardStylewizardStyle() const
voidsetWizardStyle(QWizard::WizardStyle style)

参见 向导外观和感觉options

成员函数文档

[显式构造函数] QWizard::QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

使用指定的parent和窗口flags构建向导。

参见 parent() 和 windowFlags()。

[虚拟 noexcept 析构函数] QWizard::~QWizard()

销毁向导及其页面,释放任何分配的资源。

int QWizard::addPage(QWizardPage *page)

将给定的page添加到向导中,并返回页面的ID。

保证ID比QWizard迄今为止的任何其他ID都大。

参见 setPage(),page(),和pageAdded()。

[槽函数] void QWizard::back()

返回到上一页面。

这等价于按下上一页按钮。

参见 next(),accept(),reject(),和restart()。

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()。

[虚受保护] void QWizard::cleanupPage(int id)

该虚函数在 QWizard 调用以清除用力单击 Back 键即将离开的页面 id 前被调用(除非设置了 QWizard::IndependentPages 选项)。

默认实现会调用 page(id) 的 QWizardPage::cleanupPage()。

另请参阅 QWizardPage::cleanupPage() 和 initializePage()。

[信号] void QWizard::currentIdChanged(int id)

当前页面更改时发出此信号,带有新的当前 id

注意:属性 currentId 的通知信号。

另请参阅 currentId() 和 currentPage()。

QWizardPage *QWizard::currentPage() const

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

这等价于调用 page(currentId())。

另请参阅 page(),currentId() 以及 restart()。

[信号] void QWizard::customButtonClicked(int which)

用户单击自定义按钮时发出此信号。which 可以是 CustomButton1CustomButton2CustomButton3

默认情况下,不显示任何自定义按钮。使用 setOption() 和 HaveCustomButton1HaveCustomButton2HaveCustomButton3 来显示一个按钮,并使用 setButtonText() 或 setButton() 来配置它。

另请参阅 helpRequested().

[重写虚受保护] void QWizard::done(int result)

重写了: QDialog::done(int r)。

[重写虚受保护] 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

如果页面历史包含页面 id,则返回 true;否则返回 false

按下 后退 将当前页面标记为 "未访问"。

另请参阅 visitedIds()。

[信号] 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()。

[虚拟保护] void QWizard::initializePage(int id)

QWizard 需要准备页面 id 时调用此虚拟函数,该页面可以在调用 QWizard::restart() 或用户点击 下一步 后显示。 (然而,如果设置了 QWizard::IndependentPages 选项,则此函数仅在页面首次显示时调用。)

通过重新实现此函数,您可以确保页面的字段根据先前页面的字段进行适当初始化。

默认实现调用页面 (id) 上的 QWizardPage::initializePage()。

另请参阅 QWizardPage::initializePage() 和 cleanupPage()。

[重载虚拟保护] bool QWizard::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)

重实现: QWidget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result).

[槽函数] void QWizard::next()

转到下一页。

这相当于按下 下一步提交 按钮。

另请参阅 nextId(), back(), accept(), reject() 和 restart()。

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

当用户点击 下一步 按钮时, QWizard 调用此虚拟函数以确定要显示哪个页面。

返回值是下一个页面的 ID,如果没有下一个页面则返回 -1。

默认实现会在QWizardPage::nextId()上调用当前页currentPage()。

通过重写此函数,您可以指定动态页面顺序。

另请参阅QWizardPage::nextId() 和 currentPage

QWizardPage *QWizard::page(int id) const

返回具有给定id的页面,如果没有此类页面则返回nullptr

另请参阅addPage() 和 setPage

[signal] void QWizard::pageAdded(int id)

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

另请参阅addPage(),setPage() 和 startId

QList<int> QWizard::pageIds() const

返回页面ID列表。

[signal] void QWizard::pageRemoved(int id)

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

另请参阅removePage() 和 startId

[override virtual protected] void QWizard::paintEvent(QPaintEvent *event)

重新实现:QWidget::paintEvent(QPaintEvent *event)。

QPixmap QWizard::pixmap(QWizard::WizardPixmap which) const

返回设置用于角色which的图样。

默认情况下,只有在macOS上设置了BackgroundPixmap

另请参阅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 *)。

[slot] void QWizard::restart()

从起始页面重新启动向导。当向导显示时,此函数会自动调用。

另请参阅 startId().

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

将对应于角色 which 的按钮设置为 button

要向向导添加额外的按钮(例如,一个 打印 按钮),一种方法是使用从 CustomButton1CustomButton3setButton() 调用,并使用从 HaveCustomButton1HaveCustomButton3 的选项使按钮可见。

另请参阅 button()、setButtonText()、setButtonLayout() 以及 options

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

将按钮显示的顺序设置为 layout,其中 layoutWizardButton 的列表。

默认布局取决于已设置的选项(例如,是否 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 上,”下一步”按钮被称作”继续”。

要向向导添加额外的按钮(例如,一个 打印 按钮),一种方法是使用 CustomButton1CustomButton2CustomButton3setButtonText() 调用来设置它们的文本,并使用 HaveCustomButton1HaveCustomButton2 和/或 HaveCustomButton3 选项使按钮可见。

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

另请参阅 buttonText()、setButton()、button()、setButtonLayout()、setOptions() 以及 QWizardPage::setButtonText

[槽] void QWizard::setCurrentId(int id)

currentId 设置为 id,而不访问 currentIdid 之间的页面。

如果没有变化到页面,返回

  • 向导没有页面
  • 当前页面无效
  • 给定的页面等于 currentId()
  • 给定的页面超出范围

注意:如果已跳过页面,并且 id 为 0,则将删除页面访问历史记录

注意:属性 currentId 的设置函数。

另请参阅:currentId

void QWizard::setDefaultProperty(const char *className, const char *property, const char *changedSignal)

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

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

QWizard 擅长处理最常用的 Qt 小部件。对于这些(或它们的子类),您不需要指定propertychangedSignal。下面的表格列出了这些小部件:

另请参阅: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)

如果on为真,则启用指定的option;否则,清除指定的option

另请参阅:optionstestOptionsetWizardStyle

void QWizard::setPage(int id, QWizardPage *page)

将指定的page添加到具有指定id的向导中。

注意:添加页面可能会影响未显式设置的startId属性的值。

另请参阅:addPage(),pagepageAdded

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

将角色which的图标设置为pixmap

位图在各种页面显示时被QWizard使用。确切使用的位图取决于向导样式

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

另请参阅 位图QWizardPage::setPixmap向导页面元素

void QWizard::setSideWidget(QWidget *widget)

将给定的小部件设置为在向导的左侧显示。对于使用水印位图经典样式现代样式)的样式,侧边小部件会显示在水印之上;对于其他样式或未提供水印时,侧边小部件将显示在向导的左侧。

传递nullptr将不显示侧边小部件。

如果小部件不是nullptr,则向导会重新挂载它。

隐藏任何之前的侧边小部件。

您可以在不同时间使用相同的小部件调用setSideWidget()。

除非您在设置其他侧边小部件(或nullptr)之后单独重新挂载小部件,否则向导将在销毁时删除此处设置的所有小部件。

默认情况下,没有侧边小部件。

另请参阅 sideWidget

[重写虚函数] void QWizard::setVisible(bool visible)

重实现: QDialog::setVisible(bool visible).

QWidget *QWizard::sideWidget() const

返回向导左侧的小部件或nullptr

默认情况下,没有侧边小部件。

另请参阅 setSideWidget

[重写虚函数] QSize QWizard::sizeHint() const

重实现: QDialog::sizeHint() const.

bool QWizard::testOption(QWizard::WizardOption option) const

如果给定的选项被启用,则返回true;否则返回false。

另请参阅 optionssetOptionsetWizardStyle

[虚函数] bool QWizard::validateCurrentPage()

此虚函数在用户点击下一步完成按钮时被QWizard调用来执行最后时刻的验证。如果它返回true,则显示下一页(或向导完成);否则当前页将保持显示。

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

通常,禁用下一步完成按钮(通过指定必填字段或重新实现QWizardPage::isComplete)比重新实现validateCurrentPage()更好。

另请参阅 QWizardPage::validatePage()和currentPage

QList<int> QWizard::visitedIds() const

返回已访问页面的ID列表,顺序与页面访问顺序相同。

另请参阅hasVisitedPage

© 2024 The Qt Company Ltd. 本文档中的文档贡献版权属于各自的拥有者。本提供的文档是在免费软件基金会公布并由其发布的《GNU自由文档许可证》第1.3版下授权。Qt和相应的标志是The Qt Company Ltd.在芬兰和其他国家和地区的商标。所有其他商标均为其各自的拥有者。