QWizard类
QWizard类提供了向导的框架。 更多...
头文件 | #include <QWizard> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承自 | QDialog |
公共类型
枚举 | WizardButton { 返回按钮, 下一步按钮, 提交按钮, 完成按钮, 取消按钮, …, 拉伸 } |
枚举 | WizardOption { 独立页面, 忽略副标题, 扩展水印位图, 无默认按钮, 起始页面无后退按钮, …, 最后一页无取消按钮 } |
旗帜 | WizardOptions |
枚举 | WizardPixmap { 水印位图, 标志位图, 标题位图, 背景位图 } |
枚举 | WizardStyle { 经典样式, 现代样式, 苹果样式, 雀巢样式 } |
属性
|
公共函数
QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()) | |
虚拟的 | ~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 |
虚拟 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() 明确设置要使用的外观(例如,如果您希望在所有平台上使用相同的样式)。
注意:只有启用了透明合成的Windows Vista系统上,Aero样式 才会有效。如果不满足此条件,则使用 现代样式 作为后备。
除了向导样式之外,还有一些可控制向导外观和感觉的选项。可以使用 setOption() 或 setOptions() 设置这些选项。例如,HaveHelpButton 使 QWizard 底图中显示一个“帮助”按钮以及其他向导按钮。
您甚至可以使用 setButtonLayout() 更改向导按钮的顺序为任意顺序,并且可以向按钮行添加最多三个自定义按钮(例如,一个 打印 按钮)。这是通过调用 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 组成。在任何时候,仅显示一个页面。页面有以下属性
以下图表显示了QWizard如何渲染这些属性,假设它们都存在并且使用 ModernStyle 视图
设置 副标题 时,QWizard 将其显示在标题中,在这种情况下,它还会使用 BannerPixmap 和 LogoPixmap 来装饰标题。在标题下方显示水印。底部有一排按钮,允许用户浏览页面。
页面本身(QWizardPage 小部件)占据标题、水印和按钮行之间的区域。通常,页面是一个带有 QGridLayout 的 QWizardPage,其中包含标准子小部件(QLabel、QLineEdit 等)。
如果向导的样式是 MacStyle,页面看起来将有很大不同
水印、横幅和标志位图在 MacStyle 下会被忽略。如果设置了 BackgroundPixmap,它将用作向导的背景;否则,将使用默认的 "assistant" 图像。
标题和副标题通过分别在各个页面上调用 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 属性名和一个“已更改”的信号(当属性更改时发出的信号)作为第三个和第四个参数;但是,对于最常用的 Qt 小部件,如 QLineEdit、QCheckBox 和 QComboBox,这不是必需的,因为 QWizard 已知的查找哪些属性。
如果在注册属性时在名称后面附加星号(*
),则该字段是 必填字段。当一个页面上有必填字段时,下一个和/或完成按钮只在没有必填字段时才启用。
要认为一个字段已被“填充”,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())以填充页面为默认值。默认情况下,此函数什么都不做,但可以重新实现它,根据其他页面的字段初始化页面内容(参见上面的示例)。
如果用户按下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); }
另请参阅QWizardPage、Trivial Wizard 示例和License Wizard 示例。
成员类型文档
枚举 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 | “取消”按钮(参见无取消按钮) |
QWizard::HelpButton | 5 | “帮助”按钮(参见包含帮助按钮) |
QWizard::CustomButton1 | 6 | 第一个用户自定义按钮(参见包含自定义按钮1) |
QWizard::CustomButton2 | 7 | 第二个用户自定义按钮(参见包含自定义按钮2) |
QWizard::CustomButton3 | 8 | 第三个用户自定义按钮(参见包含自定义按钮3) |
以下值仅在调用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 | 不要将下一步或完成按钮设置为对话框的默认按钮。 |
QWizard::NoBackButtonOnStartPage | 0x00000010 | 不在起始页上显示后退按钮。 |
QWizard::NoBackButtonOnLastPage | 0x00000020 | 不在最后一页上显示后退按钮。 |
QWizard::DisabledBackButtonOnLastPage | 0x00000040 | 禁用最后一页上的后退按钮。 |
QWizard::HaveNextButtonOnLastPage | 0x00000080 | 在最后一页上显示(禁用的)下一步按钮。 |
QWizard::HaveFinishButtonOnEarlyPages | 0x00000100 | 在非最终页上显示(禁用的)完成按钮。 |
QWizard::NoCancelButton | 0x00000200 | 不显示取消按钮。 |
QWizard::CancelButtonOnLeft | 0x00000400 | 将取消按钮放在后退按钮的左侧(而不是放在完成或下一步按钮的右侧)。 |
QWizard::HaveHelpButton | 0x00000800 | 显示帮助按钮。 |
QWizard::HelpButtonOnRight | 0x00001000 | 将帮助按钮放在按钮布局的最右侧(而不是最左侧)。 |
QWizard::HaveCustomButton1 | 0x00002000 | 显示第一个用户自定义按钮(CustomButton1)。 |
QWizard::HaveCustomButton2 | 0x00004000 | 显示第二个用户自定义按钮(CustomButton2)。 |
QWizard::HaveCustomButton3 | 0x00008000 | 显示第三个用户自定义按钮(CustomButton3)。 |
QWizard::NoCancelButtonOnLastPage | 0x00010000 | 在最后一页上不显示取消按钮。 |
WizardOptions类型是QFlags<WizardOption>类型的别名。它存储了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()以及向导页元素.
enum QWizard::WizardStyle
此枚举指定由QWizard支持的不同的外观。
常量 | 值 | 描述 |
---|---|---|
QWizard::ClassicStyle | 0 | 经典Windows外观 |
QWizard::ModernStyle | 1 | 现代Windows外观 |
QWizard::MacStyle | 2 | macOS外观 |
QWizard::AeroStyle | 3 | Windows Aero外观 |
另请参阅 setWizardStyle(),WizardOption和向导外观和感觉.
属性说明
currentId : int
此属性保存当前页面的ID。
此属性不能直接设置。要更改当前页面,请调用next(),back()或restart()。
默认情况下,此属性值为-1,表示没有显示页面。
访问函数
int | currentId() const |
void | setCurrentId(int id) |
通知信号
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
此属性保存向导的外观和感觉。
默认情况下,如果Windows Vista系统启用了alpha合成,则QWizard使用的是AeroStyle,无论当前小部件样式如何。如果不是这样,则默认向导样式取决于当前小部件样式,如下所示:MacStyle是如果当前小部件样式是QMacStyle,ModernStyle是如果当前小部件样式是QWindowsStyle,而在所有其他情况下,默认风格是ClassicStyle。
访问函数
QWizard::WizardStyle | wizardStyle() const |
void | setWizardStyle(QWizard::WizardStyle style) |
成员函数文档
[显式构造函数]
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 可以是 CustomButton1,CustomButton2 或 CustomButton3。
默认情况下,不显示任何自定义按钮。使用 setOption() 和 HaveCustomButton1,HaveCustomButton2 或 HaveCustomButton3 来显示一个按钮,并使用 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
。
[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。
要向向导添加额外的按钮(例如,一个 打印 按钮),一种方法是使用从 CustomButton1 到 CustomButton3 的 setButton
() 调用,并使用从 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 上,”下一步”按钮被称作”继续”。
要向向导添加额外的按钮(例如,一个 打印 按钮),一种方法是使用 CustomButton1、CustomButton2 或 CustomButton3 的 setButtonText
() 调用来设置它们的文本,并使用 HaveCustomButton1、HaveCustomButton2 和/或 HaveCustomButton3 选项使按钮可见。
按钮文本也可以使用 QWizardPage::setButtonText() 在每个页面基础上设置。
另请参阅 buttonText()、setButton()、button()、setButtonLayout()、setOptions() 以及 QWizardPage::setButtonText。
[槽]
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)
将该类的默认属性设置为property,并将关联的更改信号设置为changedSignal。
在将className的实例(或其子类之一)传递给QWizardPage::registerField()且未指定属性时,将使用默认属性。
QWizard 擅长处理最常用的 Qt 小部件。对于这些(或它们的子类),您不需要指定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为真,则启用指定的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使用。确切使用的位图取决于向导样式。
可以使用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。
另请参阅 options,setOption和setWizardStyle。
[虚函数]
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.在芬兰和其他国家和地区的商标。所有其他商标均为其各自的拥有者。