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, …, NoCancelButtonOnLastPage } |
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); #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() 明确设置要使用的外观(例如,如果您希望在所有平台上使用相同的外观)。
注意:AeroStyle 仅在启用了 alpha 合成的 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);
向导页面的元素
向导由一系列QWizardPages 组成。在任何时候,只显示一个页面。页面具有以下属性:
- Atitle.
- AsubTitle 。
- 一组像素图,视向导的风格而定,可能会也可能不会:
- WatermarkPixmap (由 和 使用 )ClassicStyle ModernStyle
- BannerPixmap (由 使用 )ModernStyle
- LogoPixmap (由 和 使用 )ClassicStyle ModernStyle
- BackgroundPixmap (由 使用 )MacStyle
下图显示了 QWizard 如何渲染这些属性,假定它们都存在,并且使用了ModernStyle :
当设置了subTitle 时,QWizard 会将其显示在页眉中,在这种情况下,它还会使用BannerPixmap 和LogoPixmap 来装饰页眉。WatermarkPixmap 显示在页眉下方的左侧。底部有一排按钮,允许用户浏览页面。
页面本身(QWizardPage 小部件)占据了页眉、水印和按钮行之间的区域。通常情况下,页面是一个QWizardPage ,上面安装有QGridLayout ,以及标准的子部件(QLabels、QLineEdits 等)。
如果向导的样式是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() 创建字段时,我们会传递一个唯一的字段名和一个 widget。我们还可以提供一个 Qt 属性名和一个 "changed "信号(当属性发生变化时发出的信号)作为第三和第四参数;不过,对于最常见的 Qt widgets(如QLineEdit,QCheckBox, 和QComboBox )来说,这并不是必须的,因为 Qt Widgets 知道要查找哪些属性。
如果在注册属性时在名称后添加了星号(*
),则表示该字段为必填字段。当页面有必填字段时,Next 和/或Finish 按钮只有在所有必填字段都填满后才会启用。
QWizard 只需检查字段的当前值是否不等于原始值(调用initializePage() 时的原始值),即可认为字段已 "填满"。对于QLineEdit 和QAbstractSpinBox 子类,QWizard 还检查hasAcceptableInput() 是否返回 true,以尊重任何验证器或掩码。
QWizard 的强制字段机制是为方便起见而提供的。一个更强大(但也更麻烦)的替代方法是重新实现QWizardPage::isComplete() 并在页面变得完整或不完整时发出QWizardPage::completeChanged() 信号。
Next 和/或Finish 按钮的启用/禁用状态是对用户输入进行验证的一种方法。另一种方法是重新实现validateCurrentPage() (或QWizardPage::validatePage() ),以执行最后的验证(如果用户输入的信息不完整或无效,则显示错误信息)。如果函数返回true
,则显示下一页(或向导结束);否则,当前页保持不变。
创建线性向导
大多数向导都是线性结构,第 1 页之后是第 2 页,以此类推直到最后一页。琐碎向导示例就是这样一个向导。使用 QWizard,可以通过实例化QWizardPages 并使用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 通常使用枚举定义。例如
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 、Trivial Wizard Example 和License Wizard Example。
成员类型文档
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().
枚举 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 按钮。 |
WizardOptions 类型是QFlags<WizardOption> 的类型定义。它存储 WizardOption 值的 OR 组合。
另请参见 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 | 经典视窗外观 |
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) |
Notifier 信号:
void | currentIdChanged(int id) |
另请参见 currentPage().
options : WizardOptions
该属性包含影响向导外观的各种选项
默认情况下,会设置以下选项(取决于平台):
- Windows:HelpButtonOnRight 。
- macOS:NoDefaultButton 和NoCancelButton 。
- X11 和 QWS(Qt for Embedded Linux):无。
访问功能:
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
该属性保留了向导的外观和感觉。
AeroStyle 默认情况下,在启用了 alpha 合成的 Windows Vista 系统上,无论当前的 widget 风格如何,QWizard 。如果不是这种情况,默认的向导样式取决于当前的 widget 样式,具体如下:如果当前的 widget 样式是 QMacStyle,则默认使用MacStyle ;如果当前的 widget 样式是 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 选项),会调用此虚函数来清理页面。
默认实现在 page(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::restart() 或用户点击Next 后,页面id 即将显示之前,QWizard 会调用这个虚拟函数来准备页面 (不过,如果设置了QWizard::IndependentPages 选项,则只有在首次显示页面时才会调用该函数)。
通过重新实现该函数,可以确保页面字段根据之前页面的字段正确初始化。
默认实现在 page(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 Widget。对于这些部件(或其子类),无需指定 或 。下表列出了这些部件:property changedSignal
另请参见 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
时,向导会将其重置。
之前的任何侧边部件都会被隐藏。
您可以在不同时间使用相同的 Widget 调用 setSideWidget()。
所有在此设置的 Widget 都将在向导销毁时被向导删除,除非您在设置其他侧 Widget(或nullptr
)后单独重新设置 Widget。
默认情况下,不存在边部件。
另请参见 sideWidget().
[override virtual]
void QWizard::setVisible(bool visible)
重实现:QDialog::setVisible(bool visible)。
QWidget *QWizard::sideWidget() const
返回向导左侧的 widget 或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()。
© 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.