【Qt开发】显示类控件(三)-> QProgressBar - 详解

news/2025/9/23 18:26:59/文章来源:https://www.cnblogs.com/wzzkaifa/p/19107697

目录

1 -> 概述

2 -> 核心属性

3 -> 核心作用

4 -> 两种基本模式

5 -> 视觉与文本

6 -> 代码示例

6.1 -> 设置进度条按时间增长

6.2 -> 创建一个天蓝色进度条

7 -> 总结


1 -> 概述

在图形用户界面(GUI)程序中,良好的用户体验至关重要。当应用程序执行一个需要等待的耗时任务时,如文件复制、数据加载、软件安装或复杂计算,如果界面没有任何提示,用户会感到困惑、焦虑,甚至怀疑程序是否已经崩溃。Qt 框架提供的 QProgressBar 控件,正是解决这一问题的核心组件,它是一个用于向用户直观展示任务完成进度的强大工具。

2 -> 核心属性

属性说明
minimum进度条最小值
maximum进度条最大值
value进度条当前值
alignment

文本在进度条中的对齐方式

  • Qt::AlignLeft:左对齐
  • Qt::AlignRight:右对齐
  • Qt::AlignCenter:居中对齐
  • Qt::AlignJustify:两端对齐
textVisible进度条的数字是否可见
orientation进度条的方向是水平还是垂直
invertAppearance是否朝反方向增长进度
textDirection文本的朝向
format

展示的数字格式

  • %p:表示进度的百分比(0-100)
  • %v:表示进度的数值(0-100)
  • %m:表示剩余时间(以毫秒为单位)
  • %t:表示总时间(以毫秒为单位)

3 -> 核心作用

QProgressBar,即进度条,其核心价值在于提供视觉反馈。它将一个抽象、不确定的等待过程,转化为一个具体、可视化的前进过程。通过一个逐渐被填满的长条形图形,配以精确的百分比数字,它明确地告知用户:

  1. 任务正在执行中:程序没有停止响应。

  2. 任务的总量是多少:通过进度条的总长度表示。

  3. 当前已完成多少:通过已填充的长度和百分比数值表示。

  4. 大致还需等待多久:用户可以根据填充速度自行预估。

这种反馈极大地提升了软件的友好度和专业感,是设计现代化、人性化应用程序不可或缺的元素。

4 -> 两种基本模式

QProgressBar 能够以两种截然不同的模式工作,以适应不同的任务场景:

  • 确定性进度条(Determinate)
    这是最常用也是最理想的模式。它适用于您可以准确知道任务总工作量(最大值)和当前已完成工作量(当前值)的场景。例如,你知道要复制 100 个文件,当前已复制了 35 个。进度条会平滑地从 0% 走向 100%,给用户精确和可靠的期待。

  • 不确定性进度条(Indeterminate)
    有时,我们无法预知任务何时结束。例如,等待网络响应、搜索未知数量的项目或执行一个无法分步测量的复杂操作。此时,确定性进度条不再适用。QProgressBar 提供了 “忙碌指示” 功能,通常表现为一个在条带上循环滚动的块(marquee)或一个来回摆动的条纹动画。它只向用户传达“程序正在忙,请稍候”的信息,而不提供完成时间。

开发者可以根据任务的具体性质,动态地在两种模式间切换,以达到最合适的通信效果。

5 -> 视觉与文本

Qt 的强大之处在于其高度的可定制性,QProgressBar 也不例外。您完全可以调整其外观以匹配应用程序的整体设计风格。

  • 文本显示:您可以控制进度条上显示的文字内容。默认情况下,它显示百分比(如 “75%”)。您可以将其隐藏,或自定义为更友好的文本(如 “处理中... 35/100”)。

  • 外观样式:通过 Qt 的样式表(QSS),您可以像定义网页CSS一样,轻松改变进度条的几乎所有视觉属性:

    • 颜色:可以设置背景色、已完成部分的填充色、文本颜色。常见的做法是用绿色表示正常进度,黄色表示警告,红色表示错误或暂停。

    • 形状与边框:可以定义圆角矩形、直角矩形,调整边框的粗细和颜色。

    • 纹理与渐变:甚至可以为其添加渐变效果或图像纹理,让界面更加炫丽。

这种灵活性确保了 QProgressBar 既能融入简约的商务软件,也能适配炫酷的多媒体应用。

6 -> 代码示例

6.1 -> 设置进度条按时间增长

1. 在界面上创建进度条,objectName 为默认

其中最小值设为 0,最大值设为 100。当前值设为 0。

2. 修改 widget.h,创建 QTimer 和 handle 函数

#ifndef WIDGET_H
#define WIDGET_H
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void handle();
private:
Ui::Widget *ui;
QTimer* timer;
};
#endif // WIDGET_H

3. 修改 widget.cpp,初始化 QTimer

此处设置 100ms 触发一次 timeout 信号。也就是一秒钟触发 10 此。

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Widget::handle);
timer->start(100);
}
Widget::~Widget()
{
delete ui;
}

4. 修改 widget.cpp,实现 handle

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Widget::handle);
timer->start(100);
}
Widget::~Widget()
{
delete ui;
}
void Widget::handle()
{
int value = ui->progressBar->value();
if (value >= 100)
{
timer->stop();
return;
}
ui->progressBar->setValue(value + 1);
}

5. 运行程序,可以看到进度条中的进度在快速增长

在实际开发中,进度条的取值,往往是根据当前任务的实际进度来进行设置的。

比如需要读取一个很大的文件,就可以获取文件的总大小,和当前读取完毕的大小,来设置进度条比例。

6.2 -> 创建一个天蓝色进度条

1. 在界面上创建一个进度条

2. 在 Qt Designer 右侧的属性编辑器中,找到 QWidget 的 styleSheet 属性

编辑如下内容:

其中的 chunk 是选中进度条中的每个 “块”。使用 QProgressBar::text 则可以选中文本。

QProgressBar::chunk{ background-color:skyblue; }

同时把 QProcessBar 的 alignment 属性设置为垂直水平居中。

如果不设置 alignment,进度条中的数字会跑到左上角。

3. 执行程序,可以看到如下效果。我们就会得到一个天蓝色的进度条

通过上述方法,也可以修改文字的颜色,字体大小等样式。

7 -> 总结

有效使用 QProgressBar 是一门艺术。通常,它应与多线程技术结合使用。将耗时任务放在一个独立的工作线程(Worker Thread)中,然后通过信号槽机制,由该线程定期向主线程(GUI 线程)报告进度更新。这样做可以确保界面始终保持流畅和响应,不会被繁重的计算任务所阻塞。

QProgressBar 远不止一个简单的长方形填充图形。它是连接应用程序后台运算与前台用户感知的关键桥梁。一个设计得当的进度条,能够有效管理用户的等待预期,减轻焦虑情绪,并显著提升整个软件产品的质感与可靠性。在 Qt 强大而灵活的框架下,QProgressBar 为实现这一目标提供了简单而全面的解决方案,是每一位 Qt 开发者都应该熟练掌握并善用的基础控件。


感谢各位大佬支持!!!

互三啦!!!

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

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

相关文章

完整教程:数据结构与算法-树和二叉树-二叉树的存储结构(Binary Tree)

完整教程:数据结构与算法-树和二叉树-二叉树的存储结构(Binary Tree)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

简单的旅游网站代码做视频网站了几百万

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 微信公众号:创享日记 发送:联合定位 获…

网站销售方案深圳关键词优化

RabbitMQ六种工作模式 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 RabbitMQ有六…

音乐电子商务网站的建设太原网站建设的公司

一、概述 嵌合抗原受体(CAR)是经过改造后赋予T细胞靶向特定抗原的新能力的受体蛋白。这些受体是嵌合的,因为它们将抗原结合和T细胞激活功能结合到一个受体中。CAR-T细胞疗法使用经过CAR改造的T细胞来治疗癌症。CAR-T免疫疗法的前提是修改T细…

互联网网站开发用哪个语言开发seo推广技术培训

AJAX 学习 AJAX 2 综合案例黑马 API01 图书管理Bootstrap 官网Bootstrap 弹框图书管理-渲染列表图书管理-添加图书图书管理-删除图书图书管理 - 编辑图书 02 图片上传03 更换图片04 个人信息设置信息渲染头像修改补充知识点:label扩大表单的范围 AJAX 2 综合案例 黑…

网站优化需求wordpress+解密成md5

Microsoft的Scott Hunter发布了Microsoft .NET Core 2.1版本的路线图。Hunter宣布Microsoft .NET Core每天约有五十万开发人员的使用量。根据Microsoft所收集的数据,在2017年9月.NET Core 2的使用量已经超过了.NET Core 1.X。有了之前成功的发布经验,Mic…

有成功案例的网站繁体网站模板

CF1100F Ivan and Burgers 静态区间,选取任意个数使得它们的异或和最大 \(n,\ m\leq5\times10^5,\ a_i\in[0,\ 10^6]\) lxl ST表,线性基 如果暴力维护线性基,线段树时间复杂度为 \(O(n\log^2n)-O(\log^3n)\) 由于重复元素对答案没有影响&…

做百度推广网站得多少钱长春火车站防疫政策

引言:当Spring Cloud遇见GraalVM,启动时间进入秒级时代 传统Spring Cloud应用因动态类加载、反射等机制导致启动缓慢(通常超过30秒),在Serverless和Kubernetes滚动更新场景下成为性能瓶颈。Spring Cloud 2023.x通过**G…

专门做男装的网站网站建设分金手指专业十四

为便于广大科技工作者更好的了解中国汽车行业首个英文学术期刊《Automotive Innovation》,并更快的定位到自己感兴趣的论文,编辑部把2018-2019年刊出的70篇论文摘要进行集结,并按照节能与环保(Energy-saving & Eco-systems)、智能网联汽车…

单页面网站设计网站欣赏wordpress 收费主题

摘要:很多人想用十全十美来修饰一样东西,比如软件,对于客户来说,当然希望他们的软件能做到完美。虽然很多专家说利用一些规范可以让软件达到更好!但是在现实开发中,真的会有那么完美的软件吗? 最…

安徽住房建设厅网站凡客诚品服装购物网

各位T3学员∶本周VBA技术资料增加391-395讲,看到通知后联络我(微:VBA6337)免费领取资料。成果来之不易,您更新后请说声谢谢,感恩我的成果。 MF391:选择同颜色的单元格 MF392:连接范…

网站改版seo方案国际最新时事新闻热点

目录 第一步先选择合适的证书类型: 第二步在填写自己需要保护的域名信息: 第三步验证域名所有权(或者是单位组织信息、详细组织单位业务详情): 第四步验证完成后证书会正常签发: 第五步将下载完成的证书…

佳木斯 两学一做 网站wordpress windows下载

人工智能在未来会有哪些可能的发展趋势? 答:人工智能在未来将继续迎来许多可能的发展趋势,以下是一些可能的方向: 更强大的算法和模型:人工智能算法和模型将不断改进和优化,为更复杂的数据和问题提供更强大…

织梦 网站首页阿里云免费建站

演示视频: 基于SSM的美容院管理系统演示。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvcMybatisVueLayuiElem…

快速建站费用网站排名突然掉了怎么回事

代码中Ci表示候选频繁i项集,Li表示符合条件的频繁i项集    # codingutf-8    def createC1(dataSet): # 构建所有1项候选项集的集合    C1 []    for transaction in dataSet:    for item in transaction:    if [item] not in C1:   …

郑州网站制作开发林州网站建设哪家专业

接上一篇:SpringBoot入门到精通_第3篇 _应用组件分析 https://blog.csdn.net/weixin_40816738/article/details/101096218 文章目录一、SpringBoot 开发三板斧1. 简述2. 案例2.1. 整合springDataJpa2.2. 启动类加注解2.3. 写配置一、SpringBoot 开发三板斧 1. 简述…

工业相机与镜头靶面尺寸的关系:从原理到选型的避坑指南 - 教程

工业相机与镜头靶面尺寸的关系:从原理到选型的避坑指南 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

提供优雅报错能力

提供优雅报错能力 漫思

Security Onion Solution

1 下载安装 https://securityonionsolutions.com/software/ https://github.com/Security-Onion-Solutions/securityonion/blob/2.4/main/DOWNLOAD_AND_VERIFY_ISO.md