进度条--QProgressBar,进度对话框--QProgressDialog

news2024/11/18 20:17:37

一、QProgressBar 进度条

1、QProgressBar 类继承自 QWidget,它是一个 QWidget 部件, QProgressBar 除了将其放置
于进度对话框之中外,还可将其放置于窗口的状态栏等其他部件中。
QProgressBar提供了一个水平或垂直的进度条,可以使用setMinimum()和setMaximum指定最小和最大步数。当前的步数是用setValue()设置的。进度条可以用reset()重绕到开头。

2、常用函数

void setMaximum(int maximum)设置最大值
void setMinimum(int minimum)设置最小值
void setRange(int minimum,int maximum)设置范围,最大、最小值
void setValue(int value)设置当前值
void reset()重置
void setOrientation(Qt::Orientation)设置方向,垂直,水平
void setAlignment(Qt::Alignment alignment)设置对齐方式,居中,左、右
void setTextVisible(bool visible)设置进度条文本是香显示
void setInvertedAppearance(bool invert)设置正、反
void setFormat(const QString &format)设置文本式显示格式

3、QProgressBar类中的属性
①、 alignment: Qt::Alignment
访问函数: Qt::Alignment alignment()const; void setAlignment(Qt::Alignment);
获取和设置进度条的对齐方式


②、 format: QString
访问函数: QString format() const; void setFormat(constQString&); void resetFormat();
设置进度条右侧描述性文字的显示格式,默认为"%p%",具体规定如下:
%p:显示的数值为百分比。

%v:显示的数值为当前设置的值。
%m:显示的数值为进度条的范围值。
示例(各情形见图示):
QProgressBar *pg=new QProgressBar;
pg->setMinimum(100); pg->setMaximum(1100); pg->setValue(800);


③、 invertedAppearance: bool
访问函数: bool invertedAppearance() const; void setInvertedAppearance(bool);
是否反转进度条,若该属性为 true,则进度条会从另一个方向增长(比如从右到左),默
认为 false。


④、 maximum: int 访问函数: int maximum() const; void setMaximum(int);
进度条的最大值。 默认为 100。
⑤、 minimum: int 访问函数: int minimum() const; void setMinimum(int);
进度条的最小值。 默认为 0。
当最小值和最大值都为 0 时,进度条会显示为一个繁忙的状态 (如上图所示)。
若指定的新的当前值超出了进度条的最大或最小值,则对之前设置的当前值没有影响。
若当前值超出了进度条新设置的最大或最小值,则重置进度条(示例见 QPrgressDialog
类)。

⑥、 value: int 访问函数: int value() const; void setValue(int);
信号: valueChanged(int);

获取和设置进度条的当前值,若指定的当前值超出了进度条的最大或最小值,则对之
前设置的当前值没有影响。


⑦、 orientation: Qt::Orientation
访问函数: Qt::Orientation orientation() const; void setOrientation(Qt::Orientation);
进度条的方向,必须是 Qt::Horizontal (水平,默认) 或 Qt::Vertical (垂直)


⑧、 text: const QString 访问函数: virtual QString text() const;
返回进度条右侧的描述性文本,比如返回"50%"等。


⑨、 textDirection: Direction
访问函数: QProgressBar::Direction textDirection()const;void setTextDirection(QProgressBar::Direction);
描述垂直进度条描述性文字的阅读方向,该属于对水平进度条无影响。默认为
QProgressBar::TopToBottom (从上到下)


⑩、 textVisible: bool 访问函数: bool isTextVisible() const; void setTextVisible(bool);
描述是否显示进度条的描述性文字(通常显示为百分比),默认为 true。该属性可能会被
样式忽略。

4、 QProgressBar类中的函数
①、 QProgressBar(QWidget* parent = Q_NULLPTR); //构造函数
②、 void reset(); //槽,重置进度条
③、 void setRange(int min, int max); //槽,设置进度条的范围(即最小值和最大值)。
④、 void valueChanged(int value); //信号
当进度条中显示的值发生变化时发送此信号, value 为进度条显示的新值。

//1.正向显示
pProgressBar = new QProgressBar(this);
pProgressBar->move(50, 100);
pProgressBar->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar->setMinimum(0);  // 最小值
pProgressBar->setMaximum(100);  // 最大值
pProgressBar->setValue(50);  // 当前进度

//2.反方向显示
pProgressBar2 = new QProgressBar(this);
pProgressBar2->move(200, 100);
pProgressBar2->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar2->setMinimum(0);  // 最小值
pProgressBar2->setMaximum(100);  // 最大值
pProgressBar2->setValue(50);  // 当前进度
pProgressBar2->setInvertedAppearance(true);  // 反方向

//3.百分比
pProgressBar3 = new QProgressBar(this);
pProgressBar3->move(100, 150);
pProgressBar3->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar3->setMinimum(0);  // 最小值
pProgressBar3->setMaximum(4800);  // 最大值
pProgressBar3->setValue(2000);  // 当前进度
double dProgress = (pProgressBar3->value() - pProgressBar3->minimum()) * 100.0
	/ (pProgressBar3->maximum() - pProgressBar3->minimum());	
//fromLocal8Bit:它将一个本地编码的QByteArray对象转换为一个QString对象
//QString::number(dProgress, 'f', 1):显示fload类型,保留1位小数。将替换掉前方的 %1 
pProgressBar3->setFormat(QString::fromLocal8Bit("当前进度为:%1%").arg(QString::number(dProgress, 'f', 1)));
pProgressBar3->setAlignment(Qt::AlignRight | Qt::AlignVCenter);  // 对齐方式

//4.如果最小值和最大值都设置为0,进度条会显示了一个 繁忙指示
pProgressBar4 = new QProgressBar(this);
pProgressBar4->move(100, 200);
pProgressBar4->setOrientation(Qt::Horizontal);  // 水平方向
pProgressBar4->setMinimum(0);  // 最小值
pProgressBar4->setMaximum(0);  // 最大值

//5. 进度条对话框
progressDlg = new QProgressDialog;
//progressDlg->setWindowModality(Qt::WindowModal);
progressDlg->setMinimumDuration(0);//dialog出现需等待的时间
progressDlg->setWindowTitle("Please Wait...");//
progressDlg->setAutoClose(0); //当进度条显示到 100%时 不隐藏
progressDlg->setAutoReset(0); //当进度条显示到 100%时 不调用reset()函数重置进度条
progressDlg->setLabelText("Copying...");//设置进度对话框标签文本,向用户提示该进度条正在做什么
progressDlg->setCancelButtonText("Cancel");//重新设置 Cancel按钮 的文本
progressDlg->setRange(0, 100);
for (int i = 0;i <= 100;i += 1) {
	progressDlg->setValue(i);
}

二、进度对话框 QProgressDialog

1、进度对话框主要用于向用户反应当前操作进度的对话框(见右图),
该对话框也是 Qt 预定义的标准对话框。
2、进度对话框包含一个进度条(QProgressBar),以及其他一些相关
的子部件。


3、 Qt 实现的进 度对话框的原理及执行过程
①、 QProgressDialog 的构造函数,会启动一个默认为 4000 毫秒的计时器,当计时器超时
时,会显示该进度对话框,也就是说只要创建了 QProgressDialog 对象,即使程序中没
有显示该对话框的 show()语句(或类似语句),该对话框 4 秒之后仍会被显示出来。因
此使用进度对话框时,不需要显示的调用 show()语句(或类似语句)显示该对话框,程
序会在超时之后自动显示。


②、重置计时器: QProgressDialog::setValue()函数可以重新启动计时器,其规则如下:
 需使用 0 或 QProgressDialog::minmum()调用 setValue()函数。
 此时使用 setMinimumDuration()函数设置的时间才能作为计时器的超时时间,也
就是说该函数此时才起作用,否则该函数不起作用。

setMinimumDuration()函数后,必须紧跟一个setValue(0) 才能起作用!
示例:

QProgressDialog *pp = new QProgressDialog;
pp->setMinimumDuration(10000); //使对话框在 10 秒之后显示
pp->setValur(0); //必须使用此步骤,否则 setMinimumDuration()函数设置的值将不起作用。
//不需使用 pp->show()或类似语句来显示对话框 pp。
以上程序会在 10 秒之后自动显示一个进度为 0%的进度对话框。


③、若进度对话框的完成时间比超时时间更短,则进度对话框不会被显示。比如
QProgressDialog *pp = new QProgressDialog;
for(int i=0; i<1001;i++) pp->setValue(i*100/1000); //对话框不会显示,很明显计算机计算 1001 次循环
不需要 4 秒时间,因此最终该对话框未被显示出来。


4、进度对话框的一些其他规则
①、基本规则:进度对话框在操作完成时(即当前值等于最大值或显示为 100%时),默认
会自动重置并且隐藏对话框。隐藏和重置由 autoClose 和 autoReset 属性控制(详见下
文)
②、若指定的新的当前值超出了进度条的最大或最小值,则对之前设置的当前值没有影响。
若当前值超出了进度条新设置的最大或最小值,则重置进度条。 这两条规则对设置最
大最小值和当前值的顺序作了规定,不同顺序会产生不同影响。
示例:

QProgressDialog *pp = new QProgressDialog;
pp->setValue(80);
//默认最小值为 0,最大值为 100。

pp->setValue(222); //当前值仍为 80。
pp->setMaximum(40); //当前值 80 大于新设置的最大值 40,重置进度条为 0。
③、 若重新设置最大值为当前值,则进度对话框不会被隐藏。此规则规定了设置最大值应
在设置当前值之前。
④、 若进度条的最大和最小值都设置为 0,则进度条不再显示百分比,而会指示一个繁忙
的状态,见下图。


5、下图为 Qt 对进度对话框外观进行的描述

6、 QProgressDialog 类中的属性
①、 autoClose: bool 访问函数: bool autoClose() const; void setAutoClose(bool);
指示 reset()函数是否隐藏对话框,若 autoClose()为 true,则 reset()函数会隐藏对话框,
若为 flase 则不会隐藏对话框,默认为 true。


②、 autoReset: bool 访问函数: bool autoReset() const; void setAutoReset(bool);

进度对话框是否在value()等于maximum时立即调用reset(),若为true则立即调用reset()
函数,若为 false 则不调用 reset()函数。默认为 true。
以上两属性可对进度对话框实现如下操作
 autoClose = false; autoReset = true; 不隐藏但重置对话框
 autoClose = false; autoReset = false; 既不隐藏也不重置对话框
 autoClose = true; autoReset = false; 因为未调用 reset()函数,所以既不重置也不
隐藏对话框。也就是说不能设置为既隐藏对话框而又不重置对话框。
 autoClose = true; autoReset = true; 隐藏且重置对话框。


③、 labelText: QString 访问函数: QString labelText() const; void setLlabelText(const QString&);
获取和设置进度对话框的标签文本。默认为空字符串。


④、 maximum: int 访问函数: int maximum() const; void setMaximum(int);
获取和设置进度条所表示的最大值。默认为 100。


⑤、 minimum: int 访问函数: int minimum() const; void setMinimum(int);
获取和设置进度条所表示的最小值。默认为 0。


⑥、 value: int 访问函数: int value() const; void setValue(int);
获取和设置进度对话框的当前值。注意:若进度对话框是模态的,则 setValue()调用
QApplication::processEvents(),因此不要在 paintEvent()函数中使用进度对话框。


⑦、 wasCanceled: const bool 访问函数: bool wasCanceled() const;
若进度对话框已被取消则为 1,否则为 0。若该属性为 1,则直到进度对话框被重置(即
调用 reset()函数)为止都会一直为 1。

注意:关闭进度对话框后,此属性值为1;重新显示后,此属性为0


⑧、 minimumDuration: int 访问函数: int minimumDuration() const;

void setMinimumDuration(int );
显示进度对话框之前需经过的时间, 若为 0,则会立即显示进度对话框,默认为 4000。


7、 QProgressDialog 类中的函数
①、 QProgressDialog(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog(const QString &labelText, const QString &cancelButtonText, int min,
int max, QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
以上为构造函数,各参数意 义如下:
labelText:进度对话框的标签文本。
cancelButtonText:取消按钮文本,若该参数为 QString()(注意:不是空字符串),则不
显示取消按钮。
min 和 max 分别表示进度条的最小和最大值。


②、 void open(QObject* receiver, const char* member);
显示进度对话框,并把 canceled()信号连接到由 receiver 和 member 指定的槽,关闭对
话框时,信号和槽将被断开。


③、 void cancel(); //槽
隐藏并重置进度对话框,且设置 wasCanceled 属性为 1。


④、 void reset(); //槽
重置进度对话框,若 autoClose 属性为 true,则进度对话框会隐藏,若该属性为 false,
则不会隐藏进度对话框。 注意:该函数会把 wasCancel 属性重置为 false。


⑤、 void setRange(int min, int max); //槽

设置进度条的范围(即最小值和最大值)。


⑥、 void setBar(QProgressBar* bar);
把进度对话框的进度条设置为 bar,注意:进度对话框会获取进度条 bar 的所有权,在
必要时会删除进度条,因此不要使用在栈上分配的进度条。


⑦、 void setLabel(QLabel* label);
把进度对话框的标签设置为 label。注意:进度对话框会获取 label 的所有权,在必要
时会将其删除,因此不要在栈上分配 label。


⑧、 void setCancelButton(QPushButton* cancelButton);
把进度对话框的取消按钮设置为 cancelButton,若设置为 0,则不会显示取消按钮。注
意:进度对话框会获取 cancelButton 的所有权,在必要时会将其删除,因此不要使用
在栈上分配的按钮。


⑨、 void setCancelButtonText(const QString &cancelButtonText); //槽
把取消按钮的文本设置为 cancelButtonText,若设置为 QString()(注意:不是空字符串),
则删除取消按钮。


⑩、 void forceShow(); //槽,受保护的
QProgressDialog 的构造函数使用此函数显示进度对话框, 注意:该函数不是虚拟的,
因此重写该函数并不能改变构造函数的默认行为。


⑪、 void canceled(); //信号
当点击 Cancel 按钮时发送此信号,此信号默认连接到 QProgressDialog::cancel()槽函数
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1014599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC基本概念

什么是JDBC JDBC概念 JDBC&#xff08;Java DataBase Connectivity&#xff09;是一套统一的基于Java语言的关系数据库编程接口规范。 该规范允许将SQL语句作为参数通过JDBC接口发送给远端数据库&#xff0c; …

8位和32位单片机如何选择适合,以及主要区别!

单片机直接影响到项目的成功和性能&#xff0c;我们将分享如何选择适合您的应用的8位或32位单片机。 8位单片机 vs. 32位单片机&#xff1a; 一、性能和处理能力&#xff1a; 8位单片机&#xff1a; 8位单片机通常适用于相对简单的应用&#xff0c;如传感器控制、LED显示、小…

代码随想录算法训练营第三十五天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 本题看上好像挺难&#xff0c;其实挺简单的&#xff0c;大家先尝试自己做一做。 代码随想录 public boolean lemonadeChange(int[] bills) {int five 0;int ten 0;for (int i 0; i < bills.length; i) {if (bills[i] 5) {five;} else if (bills[i] 10)…

Mysql同步数据到Doris的踩坑过程

问题背景 由于项目需要&#xff0c;需要把多个Mysql数据库的数据同步到Doris数据库&#xff0c;然后利用Doris强调的计算和查询能力&#xff0c;来满足业务需求。有关Doris可以查看它的官方文档来了解它。 seatunnel的使用到放弃 缘起 从《第十届GIAC全球互联网架构大会》了…

论如何在Android中还原设计稿中的阴影

每当设计稿上注明需要添加阴影时&#xff0c;Android上总是显得比较棘手&#xff0c;因为Android的阴影实现方式与Web和iOS有所区别。 一般来说阴影通常格式是有&#xff1a; X: 在X轴的偏移度 Y: 在Y轴偏移度 Blur: 阴影的模糊半径 Color: 阴影的颜色 何为阴影 但是在A…

手刻 Deep Learning -第壹章 -PyTorch教学-激励函数与感知机入门(上)

一、前言 本文接续前篇教学 Pytorch 与线性回归 &#xff0c;本文着重在 Activation Function &#xff08; 中文称 激励函数 &#xff09;&#xff0c;我们会介绍激励函数 &#xff08;也有人称 激活函数&#xff1f; 激发函数&#xff1f; &#xff09; 为什么会有用&#xf…

Python 06 之面向对象基础

&#x1f600;前言 在日常编程和软件开发中&#xff0c;我们通常会遇到各种各样的问题&#xff0c;其中很多问题都可以通过面向对象的程序设计方法来解决。面向对象编程不仅可以使代码更加组织化和系统化&#xff0c;而且还可以提高代码的重用性和可维护性。 . 在本教程中&…

一个工位的演讲

前几天&#xff0c;知乎官方制作了一个视频&#xff0c;感觉这个视频非常不错&#xff0c;推荐给大家看看。 这个短片很有创意&#xff0c;而且&#xff0c;内容也很丰富。 为什么说这个短片很有创意呢&#xff1f;因为它是从一个工位的角度切入的&#xff0c;所谓铁打的工位&a…

基于matlab实现的电力系统稳定性分析摆幅曲线代码

完整程序&#xff1a; clear; clc; t 0; tf 0; tfl 0.5; tc 0.5; % tc 0.05, 0.125, 0.5 sec for 2.5 cycles, 6.25 cycles & 25 cycles resp ts 0.05; m 2.52 / (180 * 50); i 2; dt 21.64 * pi / 180; ddt 0; time(1) 0; ang(1) 21.64; pm 0.9; pm1 2.44;…

解锁大数据宝藏:使用AI预测未来趋势的新方法

文章目录 大数据的价值传统方法与AI的优势使用AI预测未来趋势的新方法1. 时间序列分析2. 自然语言处理&#xff08;NLP&#xff09;3. 预测市场趋势 应用前景与挑战应用前景挑战和限制 结论 &#x1f389;欢迎来到AIGC人工智能专栏~解锁大数据宝藏&#xff1a;使用AI预测未来趋…

软件设计师考试学习1

前言 计算机组成原理及体系结构 数据的表示 进制的转换 原码反码补码移码 最高位是符号位&#xff0c;负数符号位为1 反码补码正数和原码一样&#xff0c;负数有区别 反码符号位不动&#xff0c;其他位置取反 补码在反码基础上加1 移码是将补码的符号为取反 在原码和反码中…

Sqlserver如何调试存储过程

前提&#xff1a;需要使用Sql Server Managerment Studio 工具进行调试。 步骤&#xff1a; 1.选择存储过程&#xff0c;右键选择“执行存储过程”。操作过后&#xff0c;会生成一个调用存储过程的代码块。 2.以编辑模式打开所以需要调试的存储过程。 3.点击调试按钮进行调…

k8s集群使用ingress转发grafana服务

文章目录 前言一、思路二、grafana准备1. grafana-configmap.yaml2. grafana.yaml 三、ingress准备1. ingress.yaml2. grafana-externalname.yaml3. ingress-nginx-controller 四、 本机host文件准备五、访问测试 前言 在k8s集群中&#xff0c;使用ingress服务转发grafana的页…

苹果是真牛,数据线的钱要赚,换电池钱也要赚,贪婪成性

iPhone15发布会是苹果当前的热点&#xff0c;发布会结束后苹果又传出了一个消息&#xff0c;进一步提高更换电池的价格&#xff0c;显示出苹果意图进一步割韭菜&#xff0c;提升利润&#xff0c;这就有点贪婪成性了吧&#xff1f; 据了解 iPhone 7、8 及 SE 系列由 528 元涨至 …

商淘云八周年 与实体店业务共发展

引言&#xff1a;商淘云主要从事电商平台、B2B订货系统、供应链管理系统的开发和搭建&#xff0c;目前服务的客户有&#xff1a;中商北斗供应链管理集团有限公司、奥克斯物业、苏州广电总台、中国平安、南方新闻网等。 随着时间的流淌&#xff0c;市场不断发展&#xff0c;商淘…

【多线程案例】阻塞式队列

1. 什么是阻塞式队列 阻塞队列是一种特殊的队列. 也遵守 "先进先出" 的原则. 阻塞队列能是一种线程安全的数据结构, 并且具有以下特性: 当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素. 当队列空的时候, 继续出队列也会阻塞, 直到有其他线程往…

性能工程落地的4个阶段

性能工程按照不同的内容和目的划分为4个阶段,分别是线下单系统压测分析阶段、线下全链路压测分析阶段、生产只读业务压测及容量评估阶段、生产读写业务全链路压测及容量评估阶段。(也可以理解为一个企业性能测试体系的发展阶段) 线下单系统压测分析阶段 针对单系统的性能…

第71步 时间序列建模实战:ARIMA建模(Python)

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们使用Python进行SARIMA模型的构建。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever wi…

LeetCode算法动态规划—剑指 Offer 10- II. 青蛙跳台阶问题

目录 剑指 Offer 10- II. 青蛙跳台阶问题 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a;​编辑 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff…

实现按钮悬停动画

知识点与技巧 伪元素 使用伪元素来作为按钮悬停效果动画展示的元素 z-index 的使用技巧 使用z-index属性来控制按钮和伪元素的层次关系 transform、transition 复习 使用transform、transition两个属性来实现动画的展示 按钮边框动画 切换效果 核心代码 .btn.btn-border-…