当前位置: 首页 > news >正文

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言

        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(ClassicStyleModernStyleMacStyleAeroStyle),如果需要让全部平台都显示一样的风格,可以使用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将其显示在标题中,在这种情况下,它还使用BannerPixmapLogoPixmap来装饰标题。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("B&ase 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系统被设置了HelpButtonOnRight,macOS系统被设置了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、公共方法

1)addPage

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

int addPage(QWizardPage *page)

2)setPage

        将给定的页面添加到具有给定id的向导中。

void setPage(int id, QWizardPage *page)

3)page

        返回给定id的页面指针,如果id不存在,则返回空指针。

QWizardPage *page(int id) const

4)removePage

        移除给定id的页面。

void removePage(int id)

5)pageIds

        返回全部页面的id集合。

QList<int> pageIds() const

6)currentPage

        返回当前显示的页面。

QWizardPage *currentPage() const

 7)hasVisitedPage

        返回给定id的页面是否已经显示过了。

bool hasVisitedPage(int id) const

8)button

        返回导航按钮。

QAbstractButton *button(QWizard::WizardButton which) const

9)setButton

        设置导航按钮。

void setButton(QWizard::WizardButton which, QAbstractButton *button)
enum QWizard::WizardButton描述
BackButtonBack按钮,在macOS系统显示为Go Back
NextButtonNext按钮,在macOS系统显示为Continue
CommitButtonCommit按钮
FinishButtonFinish按钮,在macOS系统显示为Done
CancelButtonCancel按钮
HelpButtonHelp按钮
CustomButton1第一个自定义按钮
CustomButton2第二个自定义按钮
CustomButton3第三个自定义按钮

10)buttonText

        返回某按钮的文本。

QString buttonText(QWizard::WizardButton which) const

11)setButtonText

        设置某按钮的文本。

void setButtonText(QWizard::WizardButton which, const QString &text)

12)setButtonLayout

        设置按钮显示到llayout的顺序,layout是一个WizardButtons列表。默认布局取决于所设置的选项(例如,是否HelpButtonOnRight)。如果您需要对按钮布局进行比现有选项更多的控制,可以调用此函数。可以使用Stretch在布局中指定水平拉伸。

void setButtonLayout(const QList<QWizard::WizardButton> &layout)
MyWizard::MyWizard(QWidget *parent): QWizard(parent)
{QList<QWizard::WizardButton> layout;layout << QWizard::Stretch << QWizard::BackButton << QWizard::CancelButton<< QWizard::NextButton << QWizard::FinishButton;setButtonLayout(layout);
}

13)pixmap

        返回指定导航图像的图像格式。

QPixmap pixmap(QWizard::WizardPixmap which) const

14)setPixmap

        设置指定导航图像的图像格式。

void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap)
QWizard::WizardPixmap描述
WatermarkPixmap位于ClassicStyl或ModernStyle风格页面左侧的高像素图
LogoPixmap位于ClassicStyl或ModernStyle风格页面标题右侧的小像素图
BannerPixmap占据ModernStyle风格页面标题背景的像素图
BackgroundPixmap占用MacStyle向导背景的像素图

15)sideWidget

        返回侧边小部件指针。

QWidget *sideWidget() const

16)setPixmap

        设置侧边小部件。对于使用WatermarkPixmap (ClassicStyle和ModernStyle)的样式,侧边小部件显示在水印的顶部,对于其他样式或当水印没有提供时,侧边小部件显示在向导的左侧。

void setSideWidget(QWidget *widget)

5、公共槽函数

1)back

       回到前一页,这相当于按下后退按钮。

void back()

2)next

       跳转到下一页,这相当于按下Next或Commit按钮。

void next()

3)restart

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

void restart()

6、信号

1)currentIdChanged

        这个信号在当前页发生变化时发出,带有新的当前id。

void currentIdChanged(int id)

 2)customButtonClicked

        当用户单击自定义按钮时发出该信号。

void customButtonClicked(int which)

 3)helpRequested

         当用户单击Help按钮时发出此信号。

void helpRequested()

 4)pageAdded

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

void pageAdded(int id)

 5)pageRemoved

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

void pageRemoved(int id)

相关文章:

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog&#xff0c;为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框&#xff0c;向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…...

Python类的方法

Python类的方法主要分为实例方法、类方法和静态方法三种。 1 实例方法 以self作为第一个参数的方法&#xff0c;就是类的实例方法。该方法由类的实例调用&#xff0c;Python会把调用该方法的实例对象传递给self。 如下代码定义了一个名为A的类。 class A:def __init__(self…...

变电站自动化监控系统

力安科技变电站自动化监控系统是以箱式变电站为管理对象&#xff0c;加装箱变网关&#xff0c;在完成箱变智能化改造的基础上&#xff0c;依托电易云&#xff0c;构建一体化智慧箱变及运维系统。智能箱式变电站被广泛应用于住宅小区、城市公用变压器、工厂、商场、机场、电站等…...

MySql学习笔记11——DBA命令介绍

DBA命令 数据导入 要进入Mysql 创建数据库 create database database_name;使用数据库 use database_name;初始化数据库 source .sql文件地址&#xff0c;不能加双引号&#xff1b;数据导出 要在windows的dos环境下进行 导出数据库 mysqldump database_name > 存放…...

Webpack 复习小结

nodejs学习参考 node常用命令&#xff1a; node xxx.js 执行js文件 npm init -y 初始化package.json npm i 软件包名 下载软件包到本地 npm i 软件包名 -g 下载软件包到全局 npm uni 软件包名 删除软件包 系统优化CDN使用 CDN for free 需求&#xff1a;开发模式使用本地第三…...

Laravel chunk和chunkById的坑

在编写定时任务脚本的时候&#xff0c;经常会用到chunk和chunkById的API。 一、前言 数据库引擎为innodb。 表结构简述&#xff0c;只列出了本文用到的字段。 字段类型注释idint(11)IDtypeint(11)类型mark_timeint(10)标注时间&#xff08;时间戳&#xff09; 索引&#x…...

从零开始学习 Java:简单易懂的入门指南之泛型及set集合(二十二)

泛型及set集合扩展 1.泛型1.1泛型概述 2.Set集合2.1Set集合概述和特点【应用】2.2Set集合的使用【应用】 3.TreeSet集合3.1TreeSet集合概述和特点【应用】3.2TreeSet集合基本使用【应用】3.3自然排序Comparable的使用【应用】3.4比较器排序Comparator的使用【应用】3.5两种比较…...

JVM----GC(垃圾回收)详解

一、Automatic Garbage Collection&#xff08;垃圾回收&#xff09;简介 Automatic Garbage Collection &#xff08;自动垃圾回收&#xff09;是JVM的一个特性&#xff0c;JVM会启动相关的线程&#xff0c;该线程会轮训检查heap memeory&#xff0c;并确定哪些是未被引用的(…...

数据库的三个范式

数据库的三个范式是关系数据库设计中的一组规范&#xff0c;用于确保数据的有效性和一致性。这三个范式分别是&#xff1a; 第一范式&#xff08;1NF&#xff09;&#xff1a;要求数据库表中的每一列都是不可分割的原子值。换句话说&#xff0c;每个表中的每个字段不能包含多个…...

谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行

环境&#xff1a; Win10 专业版 谷歌浏览器 版本 116.0.5845.141&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; L盾加密终端 问题描述&#xff1a; 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行&#xff0c;要全部结束谷歌浏览器进程&…...

Java EE 突击 15 - Spring Boot 统一功能处理

Spring Boot 统一功能处理 一 . 统一功能的处理1.1 初级阶段 : 不断重复1.2 中级阶段 : 集成方法1.3 高级阶段 : Spring AOP1.4 超高级阶段 : Spring 拦截器准备工作实现拦截器自定义拦截器将自定义拦截器加入到系统配置 拦截器实现原理扩展 : 统一访问前缀添加 二 . 统一异常的…...

JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白

问题1: JasperReport打印出来的整个pdf文件为空白文件&#xff1b; 问题2&#xff1a;JasperReport定义变量后打印PDF变量为null&#xff1b; 问题1原因是因为缺少数据源JRDataSource JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印…...

Python 及 Pycharm 的安装 2023.8

Python 及 PyCharm 的安装 仅适用于 Windows 系统&#xff01; 视频教程&#xff1a;【Python及Pycharm的安装 2023.8】 https://www.bilibili.com/video/BV1A34y1T7Gu 文章目录 Python 及 PyCharm 的安装安装 Python安装 PyCharmHi, PyCharmPyCharm 汉化 安装 Python 进入 …...

java中的线程中断

java中的线程中断 1、线程中断 即 线程的取消/关闭的机制2、线程对中断interrupt()的反应2.1、RUNNABLE&#xff1a;线程在运行或具备运行条件只是在等待操作系统调度2.2、WAITING/TIMED_WAITING&#xff1a;线程在等待某个条件或超时2.3、BLOCKED&#xff1a;线程在等待锁&…...

【跟小嘉学 Rust 编程】二十三、Cargo 使用指南

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

R Removing package报错(as ‘lib’ is unspecified)

remove.packages(ggpubr) Removing package from ‘/Library/Frameworks/R.framework/Versions/4.0/Resources/library’ (as ‘lib’ is unspecified) 解决办法&#xff1a; > .libPaths() [1] "/Library/Frameworks/R.framework/Versions/4.0/Resources/library&qu…...

金融信创,软件规划需关注自主安全及生态建设

软件信创化&#xff0c;就是信息技术软件应用创新发展的意思&#xff08;简称为“信创”&#xff09;。 相信在中国&#xff0c;企业对于“信创化”这个概念并不陌生。「国强则民强」&#xff0c;今年来中国经济的快速发展&#xff0c;受到了各大欧美强国的“卡脖子”操作的影…...

无重叠区间【贪心算法】

无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 class Solution {public int eraseOverlapIntervals(int[][] intervals) {//先排序&#xff0c;按照左边界升序,注…...

nlp系列(7)实体识别(Bert)pytorch

模型介绍 本项目是使用Bert模型来进行文本的实体识别。 Bert模型介绍可以查看这篇文章&#xff1a;nlp系列&#xff08;2&#xff09;文本分类&#xff08;Bert&#xff09;pytorch_bert文本分类_牧子川的博客-CSDN博客 模型结构 Bert模型的模型结构&#xff1a; 数据介绍 …...

Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)

先把官网文档摆在这&#xff0c;后面会用到的 [uniapp官网文档]: https://uniapp.dcloud.net.cn/vernacular.html# 一、开发工具准备 1-1 安装HBuilder 按照官方推荐&#xff0c;先装一个HBuilder 下载地址&#xff1a; https://www.dcloud.io/hbuilderx.html1-2 安装微信开…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...