QWizard Class
QWizard 类提供了一个向导框架。更多内容...
| 头文件: | #include <QWizard> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QDialog |
公共类型
| enum | WizardButton { BackButton, NextButton, CommitButton, FinishButton, CancelButton, …, Stretch } |
| enum | WizardOption { IndependentPages, IgnoreSubTitles, ExtendedWatermarkPixmap, NoDefaultButton, NoBackButtonOnStartPage, …, StretchBanner } |
| flags | WizardOptions |
| enum | WizardPixmap { WatermarkPixmap, LogoPixmap, BannerPixmap, BackgroundPixmap } |
| enum | WizardStyle { ClassicStyle, ModernStyle, MacStyle, AeroStyle } |
属性
|
公共函数
| QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
| virtual | ~QWizard() |
| int | addPage(QWizardPage *page) |
| QAbstractButton * | button(QWizard::WizardButton which) const |
| QString | buttonText(QWizard::WizardButton which) const |
| int | currentId() const |
| QWizardPage * | currentPage() const |
| QVariant | field(const QString &name) const |
| bool | hasVisitedPage(int id) const |
| virtual int | nextId() const |
| QWizard::WizardOptions | options() const |
| QWizardPage * | page(int id) const |
| QList<int> | pageIds() const |
| QPixmap | pixmap(QWizard::WizardPixmap which) const |
| void | removePage(int id) |
| void | setButton(QWizard::WizardButton which, QAbstractButton *button) |
| void | setButtonLayout(const QList<QWizard::WizardButton> &layout) |
| void | setButtonText(QWizard::WizardButton which, const QString &text) |
| void | setDefaultProperty(const char *className, const char *property, const char *changedSignal) |
| void | setField(const QString &name, const QVariant &value) |
| void | setOption(QWizard::WizardOption option, bool on = true) |
| void | setOptions(QWizard::WizardOptions options) |
| void | setPage(int id, QWizardPage *page) |
| void | setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap) |
| void | setSideWidget(QWidget *widget) |
| void | setStartId(int id) |
| void | setSubTitleFormat(Qt::TextFormat format) |
| void | setTitleFormat(Qt::TextFormat format) |
| void | setWizardStyle(QWizard::WizardStyle style) |
| QWidget * | sideWidget() const |
| int | startId() const |
| Qt::TextFormat | subTitleFormat() const |
| bool | testOption(QWizard::WizardOption option) const |
| Qt::TextFormat | titleFormat() const |
| virtual bool | validateCurrentPage() |
| QList<int> | visitedIds() const |
| QWizard::WizardStyle | wizardStyle() const |
重新实现的公共函数
| virtual void | setVisible(bool visible) override |
| virtual QSize | sizeHint() const override |
公共槽
| void | back() |
| void | next() |
| void | restart() |
| void | setCurrentId(int id) |
信号
| void | currentIdChanged(int id) |
| void | customButtonClicked(int which) |
| void | helpRequested() |
| void | pageAdded(int id) |
| void | pageRemoved(int id) |
受保护函数
| virtual void | cleanupPage(int id) |
| virtual void | initializePage(int id) |
重新实现的受保护函数
| virtual void | done(int result) override |
| virtual bool | event(QEvent *event) override |
| virtual bool | nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override |
| virtual void | paintEvent(QPaintEvent *event) override |
| virtual void | resizeEvent(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);
#if QT_CONFIG(translation)
QTranslator translator;
for (const QString &trPath : QLibraryInfo::paths(QLibraryInfo::TranslationsPath)) {
if (translator.load(QLocale(), u"qtbase"_s, u"_"_s, trPath)) {
app.installTranslator(&translator);
break;
}
}
#endif
QWizard wizard;
wizard.addPage(createIntroPage());
wizard.addPage(createRegistrationPage());
wizard.addPage(createConclusionPage());
wizard.setWindowTitle("Trivial Wizard");
wizard.show();
return app.exec();
}向导的外观与风格
QWizard 支持四种向导外观:
您可以通过调用 `setWizardStyle()` 显式设置要使用的样式(例如,如果您希望在所有平台上使用相同的样式)。
注意:AeroStyle 仅在启用了透明合成功能的 Windows Vista 系统上有效。当不满足此条件时,将使用ModernStyle 作为备用方案。
除了向导样式外,还有若干选项可控制向导的外观和感觉。这些选项可通过setOption() 或setOptions() 进行设置。例如,HaveHelpButton 会使 QWizard 在其他向导按钮旁显示一个“Help ”按钮。
您甚至可以使用setButtonLayout() 将向导按钮的顺序调整为任意顺序,并且可以在按钮行中最多添加三个自定义按钮(例如,Print 按钮)。具体实现方法是:调用setButton() 或setButtonText(),并使用CustomButton1 、CustomButton2 或CustomButton3 来设置按钮,同时启用HaveCustomButton1 、HaveCustomButton2 或HaveCustomButton3 选项。 每当用户点击自定义按钮时,都会触发customButtonClicked()事件。例如:
wizard()->setButtonText(QWizard::CustomButton1, tr("&Print"));
wizard()->setOption(QWizard::HaveCustomButton1, true);
connect(wizard(), &QWizard::customButtonClicked,
this, &ConclusionPage::printButtonClicked);向导页面的元素
向导由一系列QWizardPage组成。在任何时候,只会显示一个页面。一个页面具有以下属性:
- 一个title 。
- 一个subTitle 。
- 一组位图,是否采用取决于向导的样式:
- WatermarkPixmap (由ClassicStyle 和ModernStyle 使用)
- BannerPixmap (由ModernStyle 使用)
- LogoPixmap (由ClassicStyle 和ModernStyle 使用)
- BackgroundPixmap (由MacStyle 使用)
下图展示了 QWizard 如何呈现这些属性,假设所有属性均存在且使用了ModernStyle :

当设置了subTitle 时,QWizard会将其显示在页眉中,此时还会使用BannerPixmap 和LogoPixmap 来装饰页眉。WatermarkPixmap 显示在页眉下方左侧。底部有一排按钮,允许用户在页面之间导航。
页面本身(即QWizardPage 小部件)占据了页头、水印和按钮行之间的区域。通常,该页面是一个QWizardPage ,其中安装了QGridLayout ,并包含标准子小部件(如QLabel、QLineEdit等)。
如果向导的样式为MacStyle ,则页面外观将截然不同:

MacStyle 会忽略水印、横幅和徽标位图。如果设置了BackgroundPixmap ,则将其用作向导的背景;否则,将使用默认的“助手”图像。
标题和副标题可通过在各个页面上调用QWizardPage::setTitle() 和QWizardPage::setSubTitle() 来设置。它们可以是纯文本或 HTML(参见titleFormat 和subTitleFormat )。位图可以通过setPixmap() 全局设置,适用于整个向导,或者通过QWizardPage::setPixmap() 针对每个页面单独设置。
字段的注册与使用
在许多向导中,当前页面的内容可能会影响后续页面字段的默认值。为了便于页面之间的通信,QWizard 支持一种“字段”机制,允许您在页面上注册一个字段(例如,QLineEdit ),并从任何页面访问其值。 还可以指定必填字段(即用户必须填写后才能进入下一页的字段)。
要注册一个字段,请调用QWizardPage::registerField() 方法。例如:
registerField("evaluate.name*", nameLineEdit);
registerField("evaluate.email*", emailLineEdit);上述代码注册了三个字段:className 、baseClass 和qobjectMacro ,它们分别与三个子控件相关联。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 属性名称和一个“changed”信号(属性发生变化时发出的信号)作为第三和第四个参数;但是,对于最常见的 Qt Widgets(例如QLineEdit 、QCheckBox 和QComboBox ),这并不是必须的,因为 QWizard 知道要查找哪些属性。
如果在注册属性时在名称后附加一个星号(* ),则该字段为必填字段。当页面包含必填字段时,只有在所有必填字段均已填写后,Next 和/或Finish 按钮才会启用。
要判定一个字段“已填写”,QWizard 仅需检查该字段的当前值是否不等于初始值(即调用initializePage() 时的值)。对于QLineEdit 和QAbstractSpinBox 的子类,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()`),以用默认值填充该页面。默认情况下,此函数不执行任何操作,但可以重写该函数,以便根据其他页面的字段来初始化该页面的内容(参见example above )。
如果用户点击Back ,则会调用cleanupPage()(该函数进而调用QWizardPage::cleanupPage())。默认实现会将页面的字段重置为原始值(即在调用initializePage()之前的值)。若希望Back 按钮不破坏用户已输入的值并保留这些值,只需启用IndependentPages 选项即可。
创建非线性向导
某些向导更为复杂,它们允许根据用户提供的信息采取不同的导航路径。“许可证向导”示例就说明了这一点。该示例提供了多个向导页面;根据所选选项的不同,用户可以到达不同的页面。

在复杂的向导中,页面通过 ID 进行标识。这些 ID 通常使用枚举(enum)来定义。例如:
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);
}另请参阅 QWizardPage 、简单向导示例和许可证向导示例。
成员类型文档
enum QWizard::WizardButton
此枚举用于指定向导中的按钮。
| 常量 | 值 | 描述 |
|---|---|---|
QWizard::BackButton | 0 | “Back ”按钮(macOS 上的Go Back ) |
QWizard::NextButton | 1 | “Next ”按钮(在 macOS 上为Continue ) |
QWizard::CommitButton | 2 | “Commit ”按钮 |
QWizard::FinishButton | 3 | “Finish ”按钮(macOS 上的Done ) |
QWizard::CancelButton | 4 | “Cancel ”按钮(另请参阅NoCancelButton ) |
QWizard::HelpButton | 5 | “Help ”按钮(另请参阅HaveHelpButton ) |
QWizard::CustomButton1 | 6 | 第一个用户自定义按钮(另请参阅HaveCustomButton1 ) |
QWizard::CustomButton2 | 7 | 第二个用户自定义按钮(另请参见HaveCustomButton2 ) |
QWizard::CustomButton3 | 8 | 第三个用户自定义按钮(另请参阅HaveCustomButton3 ) |
以下值仅在调用setButtonLayout() 时才有效:
| 常量 | 值 | 说明 |
|---|---|---|
QWizard::Stretch | 9 | 按钮布局中的水平拉伸量 |
另请参阅 setButton()、setButtonText()、setButtonLayout() 以及customButtonClicked()。
enum QWizard::WizardOption
flags QWizard::WizardOptions
此枚举指定了影响向导外观和风格的各种选项。
| 常量 | 值 | 描述 |
|---|---|---|
QWizard::IndependentPages | 0x00000001 | 各页面彼此独立(即,它们不会从彼此那里获取值)。 |
QWizard::IgnoreSubTitles | 0x00000002 | 不显示任何副标题,即使已设置也不显示。 |
QWizard::ExtendedWatermarkPixmap | 0x00000004 | 将任何WatermarkPixmap 延伸至窗口边缘。 |
QWizard::NoDefaultButton | 0x00000008 | 不要将“Next ”或“Finish ”按钮设为对话框的default button 。 |
QWizard::NoBackButtonOnStartPage | 0x00000010 | 不要在起始页面上显示“Back ”按钮。 |
QWizard::NoBackButtonOnLastPage | 0x00000020 | 不要在最后一页上显示Back 按钮。 |
QWizard::DisabledBackButtonOnLastPage | 0x00000040 | 在最后一页禁用“Back ”按钮。 |
QWizard::HaveNextButtonOnLastPage | 0x00000080 | 在最后一页显示(禁用状态的)“Next ”按钮。 |
QWizard::HaveFinishButtonOnEarlyPages | 0x00000100 | 在非最后一页上显示(禁用的)Finish 按钮。 |
QWizard::NoCancelButton | 0x00000200 | 不显示“Cancel ”按钮。 |
QWizard::CancelButtonOnLeft | 0x00000400 | 将“Cancel ”按钮置于Back 的左侧(而非Finish 或Next 的右侧)。 |
QWizard::HaveHelpButton | 0x00000800 | 显示“Help ”按钮。 |
QWizard::HelpButtonOnRight | 0x00001000 | 将“Help ”按钮放置在按钮布局的最右侧(而不是最左侧)。 |
QWizard::HaveCustomButton1 | 0x00002000 | 显示第一个用户自定义按钮(CustomButton1 )。 |
QWizard::HaveCustomButton2 | 0x00004000 | 显示第二个用户自定义按钮(CustomButton2 )。 |
QWizard::HaveCustomButton3 | 0x00008000 | 显示第三个用户自定义按钮(CustomButton3 )。 |
QWizard::NoCancelButtonOnLastPage | 0x00010000 | 不在最后一页显示“Cancel ”按钮。 |
QWizard::StretchBanner | 0x00020000 | 如果存在banner ,则将其拉伸至向导的整个宽度。 |
WizardOptions 类型是QFlags<WizardOption> 的 typedef。它存储 WizardOption 值的按“或”运算组合。
另请参阅 setOptions()、setOption() 和testOption()。
enum QWizard::WizardPixmap
此枚举指定了可与页面关联的位图。
| 常量 | 值 | 描述 |
|---|---|---|
QWizard::WatermarkPixmap | 0 | ClassicStyle 或ModernStyle 页面左侧的宽高比较大的位图 |
QWizard::LogoPixmap | 1 | 位于ClassicStyle 或ModernStyle 页面页眉右侧的小图 |
QWizard::BannerPixmap | 2 | 占据ModernStyle 页面页眉背景的位图 |
QWizard::BackgroundPixmap | 3 | 占据MacStyle 向导背景的位图 |
另请参阅 setPixmap()、QWizardPage::setPixmap() 以及Elements of a Wizard Page 。
enum QWizard::WizardStyle
此枚举指定了QWizard 所支持的各种外观样式。
| 常量 | 值 | 描述 |
|---|---|---|
QWizard::ClassicStyle | 0 | 经典 Windows 外观 |
QWizard::ModernStyle | 1 | 现代 Windows 外观 |
QWizard::MacStyle | 2 | macOS 风格 |
QWizard::AeroStyle | 3 | Windows Aero 风格 |
另请参阅 setWizardStyle()、WizardOption 以及Wizard Look and Feel 。
属性文档
currentId : int
该属性存储当前页面的 ID
默认情况下,该属性的值为 -1,表示当前未显示任何页面。
访问函数:
| int | currentId() const |
| void | setCurrentId(int id) |
通知信号:
| void | currentIdChanged(int id) |
另请参阅 currentPage()。
options : WizardOptions
此属性包含影响向导外观和风格的各种选项
默认情况下,会设置以下选项(具体取决于平台):
- Windows:HelpButtonOnRight 。
- macOS:NoDefaultButton 和NoCancelButton 。
- X11 和 QWS(面向嵌入式 Linux 的 Qt):无。
访问函数:
| QWizard::WizardOptions | options() const |
| void | setOptions(QWizard::WizardOptions options) |
另请参阅 wizardStyle 。
startId : int
该属性存储第一页的ID
如果未显式设置此属性,则其默认值为该向导中的最小页面 ID;若尚未插入任何页面,则默认值为 -1。
访问函数:
| int | startId() const |
| void | setStartId(int id) |
subTitleFormat : Qt::TextFormat
此属性存储页面副标题所使用的文本格式
默认格式为Qt::AutoText 。
访问函数:
| Qt::TextFormat | subTitleFormat() const |
| void | setSubTitleFormat(Qt::TextFormat format) |
另请参阅 QWizardPage::title 和titleFormat 。
titleFormat : Qt::TextFormat
此属性存储页面标题所使用的文本格式
默认格式为Qt::AutoText 。
访问函数:
| Qt::TextFormat | titleFormat() const |
| void | setTitleFormat(Qt::TextFormat format) |
另请参阅 QWizardPage::title 和subTitleFormat 。
wizardStyle : WizardStyle
该属性控制向导的外观和风格
默认情况下,在启用了透明合成功能的 Windows Vista 系统上,QWizard 会使用AeroStyle 样式,无论当前小部件样式为何。 如果情况并非如此,则默认向导样式取决于当前小部件样式,具体如下:如果当前小部件样式为 QMacStyle,则默认使用MacStyle ;如果当前小部件样式为 QWindowsStyle,则默认使用ModernStyle ;在所有其他情况下,默认使用ClassicStyle 。
访问函数:
| QWizard::WizardStyle | wizardStyle() const |
| void | setWizardStyle(QWizard::WizardStyle style) |
另请参阅 Wizard Look and Feel 和options 。
成员函数文档
[explicit] QWizard::QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
根据给定的parent 和窗口flags 构建一个向导。
另请参阅 parent() 和windowFlags()。
[virtual noexcept] QWizard::~QWizard()
销毁该向导及其页面,并释放所有已分配的资源。
int QWizard::addPage(QWizardPage *page)
将指定的page 添加到向导中,并返回该页面的ID。
该 ID 保证大于该QWizard 当前包含的任何其他 ID。
另请参阅 setPage()、page() 和pageAdded()。
[slot] void QWizard::back()
返回上一页。
这相当于点击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 上,Next 按钮被命名为Continue 。
另请参阅 button()、setButton()、setButtonText()、QWizardPage::buttonText() 和QWizardPage::setButtonText()。
[virtual protected] void QWizard::cleanupPage(int id)
该虚拟函数由QWizard 调用,用于在用户点击Back 离开页面id 之前清理该页面(除非设置了QWizard::IndependentPages 选项)。
默认实现会调用页面(id )上的QWizardPage::cleanupPage()。
另请参阅 QWizardPage::cleanupPage() 和initializePage()。
[signal] void QWizard::currentIdChanged(int id)
当当前页面发生变化时,会发出此信号,此时新的当前页面为id 。
注意: 这是属性currentId 的通知器 信号。
另请参阅 currentId() 和currentPage()。
QWizardPage *QWizard::currentPage() const
返回指向当前页面的指针;如果没有当前页面(例如,在显示向导之前),则返回nullptr 。
这相当于调用 page(currentId())。
另请参阅 page()、currentId() 和restart()。
[signal] void QWizard::customButtonClicked(int which)
当用户点击自定义按钮时,会触发此信号。which 可以是CustomButton1 、CustomButton2 或CustomButton3 。
默认情况下,不会显示任何自定义按钮。若要显示自定义按钮,请调用setOption() 并传入HaveCustomButton1 、HaveCustomButton2 或HaveCustomButton3 作为参数;若要配置该按钮,请使用setButtonText() 或setButton()。
另请参阅 helpRequested()。
[override virtual protected] void QWizard::done(int result)
重新实现了:QDialog::done(int r)。
[override virtual protected] 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 。
点击Back 会将当前页面再次标记为“未访问”。
另请参阅 visitedIds()。
[signal] void QWizard::helpRequested()
当用户点击“Help ”按钮时,会触发此信号。
默认情况下,不会显示“Help ”按钮。若需显示该按钮,请调用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()。
[virtual protected] void QWizard::initializePage(int id)
该虚拟函数由QWizard 调用,用于在页面id 显示之前对其进行准备——无论是因调用QWizard::restart()所致,还是因用户点击Next 所致。(不过,如果设置了QWizard::IndependentPages 选项,则该函数仅在页面首次显示时被调用。)
通过重写此函数,您可以确保页面的字段能够根据前一页的字段进行正确初始化。
默认实现会在页面加载时(id )调用QWizardPage::initializePage()。
另请参阅 QWizardPage::initializePage()和cleanupPage()。
[override virtual protected] bool QWizard::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
重写了:QWidget::nativeEvent (const QByteArray &eventType, void *message, qintptr *result)。
[slot] void QWizard::next()
转到下一页。
这相当于点击Next 或Commit 按钮。
另请参阅 nextId()、back()、accept()、reject() 以及restart()。
[virtual] int QWizard::nextId() const
该虚拟函数由QWizard 调用,用于确定当用户点击Next 按钮时应显示哪一页。
返回值为下一页的 ID,如果没有后续页面,则返回 -1。
默认实现会在调用currentPage() 时调用QWizardPage::nextId()。
通过重写此函数,您可以指定动态的页面顺序。
另请参阅 QWizardPage::nextId() 和currentPage()。
QWizardPage *QWizard::page(int id) const
返回指定id 的页面;如果不存在该页面,则返回nullptr 。
[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() 以及Elements of a Wizard Page 。
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 ”。
若要向向导中添加额外按钮(例如,Print 按钮),一种方法是调用setButton(),将CustomButton1 设置为CustomButton3 ,并使用HaveCustomButton1 和HaveCustomButton3 选项使按钮可见。
另请参阅 button()、setButtonText()、setButtonLayout() 以及options 。
void QWizard::setButtonLayout(const QList<QWizard::WizardButton> &layout)
将按钮的显示顺序设置为layout ,其中layout 是一个WizardButton列表。
默认布局取决于所设置的选项(例如,是否启用了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 上,Next 按钮被称为Continue 。
若要向向导中添加额外按钮(例如“Print ”按钮),一种方法是调用 setButtonText() 并传入CustomButton1 、CustomButton2 或CustomButton3 来设置其文本,然后使用HaveCustomButton1 、HaveCustomButton2 和/或HaveCustomButton3 选项使这些按钮可见。
按钮文本也可以通过QWizardPage::setButtonText() 按页面进行设置。
另请参阅 buttonText()、setButton()、button()、setButtonLayout()、setOptions() 以及QWizardPage::setButtonText()。
[slot] void QWizard::setCurrentId(int id)
将currentId 设置为id ,期间不访问currentId 到id 之间的页面。
如果
- 向导中没有页面
- 当前页面无效
- 给定的页面等于currentId()
- 给定的页面超出范围
注意:如果已向前跳过页面且id 为0,则页面访问历史记录将被删除
注意: 属性currentId 的设置 函数。
另请参阅 currentId()。
void QWizard::setDefaultProperty(const char *className, const char *property, const char *changedSignal)
将className 的默认属性设置为property ,并将相关的变更信号设置为changedSignal 。
当将className (或其子类之一)的实例传递给QWizardPage::registerField() 且未指定属性时,将使用该默认属性。
QWizard 该函数支持最常见的 Qt Widgets。对于这些 Widgets(或其子类),您无需指定property 或changedSignal 。下表列出了这些 Widgets:
另请参阅 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 为true,则启用指定的option ;否则,清除指定的option 。
另请参阅 options 、testOption() 和setWizardStyle()。
void QWizard::setPage(int id, QWizardPage *page)
将给定的page 添加到具有给定id 的向导中。
注意: 如果未显式设置startId 属性,则添加 页面可能会影响该属性的值。
另请参阅 addPage()、page() 和pageAdded()。
void QWizard::setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
将角色which 的位图设置为pixmap 。
QWizard 在显示页面时会使用这些位图。实际使用的位图取决于wizard style 。
还可以通过QWizardPage::setPixmap() 为特定页面设置像素图。
另请参阅 pixmap()、QWizardPage::setPixmap() 以及Elements of a Wizard Page 。
void QWizard::setSideWidget(QWidget *widget)
将指定的widget 设置为显示在向导的左侧。对于使用WatermarkPixmap 的样式(ClassicStyle 和ModernStyle ),侧边小部件将显示在水印上方;对于其他样式,或者未提供水印时,侧边小部件将显示在向导的左侧。
若传入nullptr ,则不显示侧边小部件。
当widget 不是nullptr 时,向导会重新设置其父元素。
任何先前的侧边小部件都会被隐藏。
您可以在不同时间调用 setSideWidget() 并传入相同的控件。
除非您在设置其他侧边小部件(或 `nullptr`)后单独重新设置该小部件的父级,否则向导在销毁时会删除此处设置的所有小部件。
默认情况下,不存在侧边小部件。
另请参阅 sideWidget()。
[override virtual] void QWizard::setVisible(bool visible)
重写了:QDialog::setVisible (bool visible)。
QWidget *QWizard::sideWidget() const
返回向导左侧的小部件,或nullptr 。
默认情况下,不存在侧边小部件。
另请参阅 setSideWidget()。
[override virtual] QSize QWizard::sizeHint() const
重新实现了:QDialog::sizeHint() const。
bool QWizard::testOption(QWizard::WizardOption option) const
如果指定的option 已启用,则返回true ;否则,返回false。
另请参阅 options 、setOption() 和setWizardStyle()。
[virtual] bool QWizard::validateCurrentPage()
当用户点击Next 或Finish 时,QWizard 会调用此虚拟函数,以执行一些最后时刻的验证。如果它返回true ,则显示下一页(或向导结束);否则,当前页面保持显示。
默认实现会在调用currentPage() 时调用QWizardPage::validatePage()。
在可能的情况下,通常更好的做法是禁用“Next ”或“Finish ”按钮(通过指定mandatory fields 或重写QWizardPage::isComplete()),而不是重写validateCurrentPage()。
另请参阅 QWizardPage::validatePage() 和currentPage()。
QList<int> QWizard::visitedIds() const
返回已访问页面的 ID 列表,按访问页面的顺序排列。
另请参阅 hasVisitedPage()。
© 2026 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.







