苏州微网站建设公司,怀化 优化生育政策,网站建设的开源平台,长沙网站优化对策一、前言 QWizard类继承于QDialog#xff0c;为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框#xff0c;向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…一、前言 QWizard类继承于QDialog为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、拆机流程等一些复杂或者不常见的任何的场景。 QWizard类继承于QDialog并在其基础上拓展了向导的功能每个子界面由QWizardPage封装下面的例子演示如果新建一个向导。
#include QApplication
#include QDebug
#include QWizardPage
#include QLabel
#include QVBoxLayout
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()
{return new QWizardPage;
}QWizardPage *createConclusionPage()
{return new QWizardPage;
}int main(int argc, char *argv[])
{QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);QApplication app(argc, argv);QWizard wizard;wizard.addPage(createIntroPage());wizard.addPage(createRegistrationPage());wizard.addPage(createConclusionPage());wizard.setWindowTitle(Trivial Wizard);wizard.show();return app.exec();
} 向导外观 QWizard提供了四种向导界面风格WizardStyle(ClassicStyle、ModernStyle、MacStyle、AeroStyle)如果需要让全部平台都显示一样的风格可以使用setWizardStyle()设置。 QWizard还提供了外观选项options用来控制向导的外观比如显示帮助按钮HaveHelpButton忽略二级标题IgnoreSubTitles等使用setOption()或者setOptions()来设置这些外观选项。
向导页面和元素 QWizardPage继承于QWdiget是导航框架队列中的子界面在同一时间只能显示一个页面这和StackedWidget机制是一样的。每个子界面拥有标题title、二级标题subTitle和一组像素图像素图的显示需要跟界面风格WizardStyle互相绑定。
WatermarkPixmap(由ClassicStyle和ModernStyle使用)BannerPixmap(由ModernStyle使用)LogoPixmap(由ClassicStyle和ModernStyle使用)BackgroundPixmap (MacStyle使用) 如果设置的是ModernStyle下图显示了QWizard如何呈现这些属性。标题等文本支持纯文本或者富文本格式当设置了subTitle后QWizard将其显示在标题中在这种情况下它还使用BannerPixmap和LogoPixmap来装饰标题。WatermarkPixmap显示在左侧在标题下方。在底部有一排按钮允许用户浏览页面。 如果设置的是MacStyle那么显示的风格就看起来很不一样水印watermark、横幅banner,和标志像素图logo被MacStyle忽略如果设置了BackgroundPixmap它将用作向导的背景。 注册机制 通常在向导界面中经常会出现前面页面的选择会影响后面页面的展示和选择为了便于在页面之间进行通信QWizard支持一个“字段”机制允许您在页面上注册一个字段并从任何页面访问其值。还可以指定强制字段(即在用户进入下一页之前必须填充的字段)下面是一个注册字段的例子。
ClassInfoPage::ClassInfoPage(QWidget *parent): QWizardPage(parent)
{...classNameLabel new QLabel(tr(Class name:));classNameLineEdit new QLineEdit;classNameLabel-setBuddy(classNameLineEdit);baseClassLabel new QLabel(tr(Base class:));baseClassLineEdit new QLineEdit;baseClassLabel-setBuddy(baseClassLineEdit);qobjectMacroCheckBox new QCheckBox(tr(Generate Q_OBJECT macro));registerField(className*, classNameLineEdit);registerField(baseClass, baseClassLineEdit);registerField(qobjectMacro, qobjectMacroCheckBox);...
} 上面的代码注册了三个字段:className、baseClass和qobjectMacro它们与三个编辑框相关联className后面的星号(*)表示必填字段。 然后我们在其他任意界面就可以通过注册的字段获取到相关联的子部件的值。
void OutputFilesPage::initializePage()
{QString className field(className).toString();headerLineEdit-setText(className.toLower() .h);implementationLineEdit-setText(className.toLower() .cpp);outputDirLineEdit-setText(QDir::toNativeSeparators(QDir::tempPath()));
}
创建非线性向导 大多数向导都是线性结构第1页接着第2页以此类推直到最后一页在上面的例子中我们通过使用addPage()添加页面默认按照添加的顺序显示。 有些向导更复杂因为它们允许基于用户提供的信息的不同遍历路径根据选择的选项用户可以访问不同的页面。下面的例子演示如何创建非线性向导 首先我们需要把每个界面赋予ID。
class LicenseWizard : public QWizard
{...enum { Page_Intro, Page_Evaluate, Page_Register, Page_Details,Page_Conclusion };...
}; 在增加页面的同时让每个页面绑定某一个ID。
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递增做显示所以我们需要重新实现next()方法。
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;}
}
二、QWizard类
1、currentId 该属性表示当前页面的ID该属性可能会没有被设置默认为-1。
int currentId() const
2、options 该属性表示当前对话框的一些外观显示策略默认情况下windows系统被设置了HelpButtonOnRightmacOS系统被设置了NoDefaultButton和NoCancelButton其他系统默认没有设置任何内容。
QWizard::WizardOptions options() const
void setOptions(QWizard::WizardOptions options)bool testOption(QWizard::WizardOption option) const
void setOption(QWizard::WizardOption option, bool on true) QWizard::WizardOption描述IndependentPages页面相互独立IgnoreSubTitles忽略二级标题ExtendedWatermarkPixmap扩展显示WatermarkPixmap到窗口边缘。NoDefaultButton不显示Next或Finish按钮。NoBackButtonOnStartPage起始页面不显示Back按钮NoBackButtonOnLastPage尾页不显示Back按钮DisabledBackButtonOnLastPageBack按钮在尾页显示为不可触发HaveNextButtonOnLastPageNext按钮在尾页显示为不可触发HaveFinishButtonOnEarlyPagesFinish按钮在尾页显示为不可触发NoCancelButton不显示Cancel按钮CancelButtonOnLeft把Cancel按钮放在Back左边HaveHelpButton显示Help按钮HelpButtonOnRightHelp按钮放在最右边HaveCustomButton1显示第一个自定义按钮HaveCustomButton2显示第二个自定义按钮HaveCustomButton3显示第三个自定义按钮NoCancelButtonOnLastPage尾页不显示cancel按钮 3、wizardStyle 该属性表示导航的风格。 1、默认情况下QWizard在启用alpha合成的Windows Vista系统上使用AeroStyle不管当前的小部件样式如何。 2、上述调节不满足则默认的向导样式取决于当前小部件的样式如果当前小部件的样式是QMacStyle则默认为MacStyle如果当前小部件的样式是QWindowsStyle则默认为ModernStyle。 3、上面两点都不满足则默认为ClassicStyle。 4、如果需要全部平台都一样的风格则使用setWizardStyle修改默认风格。
QWizard::WizardStyle wizardStyle() const
void setWizardStyle(QWizard::WizardStyle style)
4、startId 该属性表示显示第一页的id如果没有设置则默认则最低页的id。
int startId() const
void setStartId(int id)
5、subTitleFormat 该属性表示二级标题的问题格式默认为AutoText。如果已知内容格式可以设置为纯文本PlainText或者富文本RichText。
Qt::TextFormat subTitleFormat() const
void setSubTitleFormat(Qt::TextFormat format)
6、titleFormat 该属性表示标题的问题格式默认为AutoText。如果已知内容格式可以设置为纯文本PlainText或者富文本RichText。
Qt::TextFormat titleFormat() const
void setTitleFormat(Qt::TextFormat format)
4、公共方法
1addPage 将给定的页面添加到向导中并返回该页的ID。
int addPage(QWizardPage *page)
2setPage 将给定的页面添加到具有给定id的向导中。
void setPage(int id, QWizardPage *page)
3page 返回给定id的页面指针如果id不存在则返回空指针。
QWizardPage *page(int id) const
4removePage 移除给定id的页面。
void removePage(int id)
5pageIds 返回全部页面的id集合。
QListint pageIds() const
6currentPage 返回当前显示的页面。
QWizardPage *currentPage() const 7hasVisitedPage 返回给定id的页面是否已经显示过了。
bool hasVisitedPage(int id) const
8button 返回导航按钮。
QAbstractButton *button(QWizard::WizardButton which) const
9setButton 设置导航按钮。
void setButton(QWizard::WizardButton which, QAbstractButton *button) enum QWizard::WizardButton描述BackButtonBack按钮在macOS系统显示为Go BackNextButtonNext按钮在macOS系统显示为ContinueCommitButtonCommit按钮FinishButtonFinish按钮在macOS系统显示为DoneCancelButtonCancel按钮HelpButtonHelp按钮CustomButton1第一个自定义按钮CustomButton2第二个自定义按钮CustomButton3第三个自定义按钮 10buttonText 返回某按钮的文本。
QString buttonText(QWizard::WizardButton which) const
11setButtonText 设置某按钮的文本。
void setButtonText(QWizard::WizardButton which, const QString text)
12setButtonLayout 设置按钮显示到llayout的顺序layout是一个WizardButtons列表。默认布局取决于所设置的选项(例如是否HelpButtonOnRight)。如果您需要对按钮布局进行比现有选项更多的控制可以调用此函数。可以使用Stretch在布局中指定水平拉伸。
void setButtonLayout(const QListQWizard::WizardButton layout)
MyWizard::MyWizard(QWidget *parent): QWizard(parent)
{QListQWizard::WizardButton layout;layout QWizard::Stretch QWizard::BackButton QWizard::CancelButton QWizard::NextButton QWizard::FinishButton;setButtonLayout(layout);
}13pixmap 返回指定导航图像的图像格式。
QPixmap pixmap(QWizard::WizardPixmap which) const
14setPixmap 设置指定导航图像的图像格式。
void setPixmap(QWizard::WizardPixmap which, const QPixmap pixmap) QWizard::WizardPixmap描述WatermarkPixmap位于ClassicStyl或ModernStyle风格页面左侧的高像素图LogoPixmap位于ClassicStyl或ModernStyle风格页面标题右侧的小像素图BannerPixmap占据ModernStyle风格页面标题背景的像素图BackgroundPixmap占用MacStyle向导背景的像素图 15sideWidget 返回侧边小部件指针。
QWidget *sideWidget() const
16setPixmap 设置侧边小部件。对于使用WatermarkPixmap (ClassicStyle和ModernStyle)的样式侧边小部件显示在水印的顶部对于其他样式或当水印没有提供时侧边小部件显示在向导的左侧。
void setSideWidget(QWidget *widget)
5、公共槽函数
1back 回到前一页这相当于按下后退按钮。
void back()
2next 跳转到下一页这相当于按下Next或Commit按钮。
void next()
3restart 在起始页重新启动向导在显示向导时自动调用此函数。
void restart()
6、信号
1currentIdChanged 这个信号在当前页发生变化时发出带有新的当前id。
void currentIdChanged(int id) 2customButtonClicked 当用户单击自定义按钮时发出该信号。
void customButtonClicked(int which) 3helpRequested 当用户单击Help按钮时发出此信号。
void helpRequested() 4pageAdded 每当将页面添加到向导中时就会发出此信号页面的id作为参数传递。
void pageAdded(int id) 5pageRemoved 每当从向导中删除页面时都会发出此信号页面的id作为参数传递。
void pageRemoved(int id)