十二、QProgressBar的简单使用与样式优化(Qt5 GUI系列)


目录

一、设计需求

二、实现代码

三、代码解析

四、总结

五、扩展(自定义QProgressBar样式)


一、设计需求

        在很多应用程序中,在执行费时操作时都会展示一个进度条来展示操作进行的进度。常见的场景,如:拷贝操作、安装操作以及卸载操作。本例要求实现进度条简单使用,同时实现模态与非模态的两种方式。

二、实现代码

#include "progressdlg.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);ProgressDlg w;w.show();return a.exec();
}
#ifndef PROGRESSDLG_H
#define PROGRESSDLG_H#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QProgressBar>
#include <QComboBox>
#include <QPushButton>
#include <QGridLayout>class ProgressDlg : public QDialog
{Q_OBJECTpublic:ProgressDlg(QWidget *parent = 0);~ProgressDlg();
private slots:void startProgress();
private:QLabel *FileNum;QLineEdit *FileNumLineEdit;QLabel *ProgressType;QComboBox *comboBox;QProgressBar *progressBar;QPushButton *starBtn;QGridLayout *mainLayout;
};#endif // PROGRESSDLG_H
#include "progressdlg.h"
#include <QProgressDialog>
#include <QFont>
ProgressDlg::ProgressDlg(QWidget *parent): QDialog(parent)
{//设置字体,标题QFont font("ZYSong18030",12);setFont(font);setWindowTitle(tr("Progress"));FileNum =new QLabel;FileNum->setText(tr("文件数目:"));FileNumLineEdit =new QLineEdit;FileNumLineEdit->setText(tr("1000000"));//选择显示方式ProgressType =new QLabel;ProgressType->setText(tr("显示类型:"));comboBox =new QComboBox;comboBox->addItem(tr("progressBar"));comboBox->addItem(tr("progressDialog"));progressBar =new QProgressBar;starBtn =new QPushButton();starBtn->setText(tr("开始"));mainLayout =new QGridLayout(this);mainLayout->addWidget(FileNum,0,0);mainLayout->addWidget(FileNumLineEdit,0,1);mainLayout->addWidget(ProgressType,1,0);mainLayout->addWidget(comboBox,1,1);mainLayout->addWidget(progressBar,2,0,1,2);mainLayout->addWidget(starBtn,3,1);//用于设置布局的边距mainLayout->setMargin(15);//用于设置布局中窗口部件之间的间距mainLayout->setSpacing(10);//建立联系connect(starBtn,SIGNAL(clicked()),this,SLOT(startProgress()));
}ProgressDlg::~ProgressDlg()
{}void ProgressDlg::startProgress()
{bool ok;//获取当前需要复制的文件数目,这里对应进度条的总步进值int num =FileNumLineEdit->text().toInt(&ok);if(comboBox->currentIndex()==0)                   //ProgressBar{progressBar->setRange(0,num);for(int i=1;i<num+1;i++){//QProgressBar的使用progressBar->setValue(i);}}else if(comboBox->currentIndex()==1)             //ProgressDialog{//新建一个QProgressDialog对象QProgressDialog *progressDialog=new QProgressDialog(this);QFont font("ZYSong18030",12);progressDialog->setFont(font);//设置进度对话框采用模态方式进行显示,即显示进度的同时,其他窗口将不响应输入信号progressDialog->setWindowModality(Qt::ApplicationModal);//设置进度对话框出现需等待的时间,此处设定为 5 秒,默认为 4 秒progressDialog->setMinimumDuration(5);progressDialog->setWindowTitle(tr("Please Wait"));progressDialog->setLabelText(tr("Copying..."));progressDialog->setCancelButtonText(tr("Cancel"));//设置进度对话框的步进范围//注意:当num为0时,如果进度条的值设置为0,此时进度条的状态时不稳定的,有时为空,有时为满。//因为此时的0即为最小值也为最大值progressDialog->setRange(0,num);for(int i=1;i<num+1;i++){progressDialog->setValue(i);//检测 "取消”按钮是否被触发,若触发则退出循环并关闭进度对话框if(progressDialog->wasCanceled())return;}}
}

效果展示:

三、代码解析

(1)setWindowModality函数

        QWidget类中的setWindowModality()函数是用于设置窗口模态性的方法,可以用来控制窗口对于其他窗口的阻塞程度。

        窗口模态性指的是窗口能否被其他窗口遮盖。在Qt中,有三种窗口模态性模式:   

        Qt::NonModal:非模态窗口,不会阻塞其他窗口。
        Qt::WindowModal:应用程序模态窗口,阻塞其所属应用程序中的其他窗口,但允许与其他应用程序的窗口进行交互。
        Qt::ApplicationModal:系统模态窗口,阻塞其所属应用程序中的所有窗口,包括与其他应用程序的窗口之间的交互。

        setWindowModality()函数的用法如下:

void QWidget::setWindowModality(Qt::WindowModality windowModality)

        其中,windowModality是一个枚举类型,可以设置为Qt::NonModal、Qt::WindowModal或Qt::ApplicationModal中的任意一个值。

例如,将一个对话框设置为应用程序模态窗口可以这样做:

QDialog *dialog = new QDialog();
dialog->setWindowModality(Qt::WindowModal);
dialog->exec();

        在上述代码中,QDialog对象dialog被设置为应用程序模态窗口,即在其打开状态下,所属应用程序中的其他窗口被阻塞,但它可以与其他应用程序的窗口进行交互。exec()函数用于显示对话框并进入模态运行,直到对话框被关闭。

        需要注意的是,如果将一个窗口设置为模态窗口,则该窗口在显示期间将会阻塞其他事件的处理,包括其他窗口的事件,直到该模态窗口被关闭。因此,在设置窗口模态性时,应当谨慎使用,以免影响用户的操作体验。

四、总结

        QProgressBar使用方法基本上就是上述的方法。但是用户可以自定义进度条的样式,来实现更加优秀的进度框。

五、扩展(自定义QProgressBar样式)

        在Qt中,可以使用样式表(StyleSheet)来自定义QProgressBar的外观。QProgressBar有几个重要的样式属性可以用来自定义其外观:

                background-color:进度条的背景颜色。
                color:进度条的前景颜色(即进度条已完成部分的颜色)。
                selection-background-color:进度条的选中(已完成)部分的背景颜色。
                border-color:进度条的边框颜色。
                border-width:进度条的边框宽度。

以下是一个用样式表自定义QProgressBar外观的示例:

QProgressBar {background-color: pink;border: 1px solid black;border-radius: 5px;height: 20px;
}QProgressBar::chunk {background-color: green;width: 20px;margin: 1px;
}

        在上述示例中,QProgressBar的背景颜色被设置为粉色,边框为黑色,圆角半径为5px,高度为20px。QProgressBar::chunk指定了进度条的前景颜色为绿色,宽度为20px,外边距为1px。

效果展示:

        可以根据需要自定义更多的样式属性,以实现不同的进度条样式。另外,可以使用颜色、背景图片或渐变等高级特性来进一步定制进度条的外观。使用样式表自定义QProgressBar的方法与其他Qt部件类似。只需将样式表应用到QProgressBar上即可。

        

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

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

相关文章

Unity组件开发--AB包打包工具

1.项目工程路径下创建文件夹&#xff1a;ABundles 2.AB包打包脚本&#xff1a; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement;public class AssetBundle…

Vue入门三(表单控制|购物车案例|v-model进阶|与后端交互|计算属性|监听属性|Vue生命周期)

文章目录 一、表单控制二、购物车案例三、v-model进阶四、与后端交互跨域问题解决&#xff0c;三种交互方法跨域问题详解1-CORS&#xff1a;后端代码控制&#xff0c;上面案例采用的方式1) 方式一&#xff1a;后端添加请求头2) 方式二&#xff1a;编写中间件3) 方式三&#xff…

代理IP连接不上?网速过慢?自查与解决方法

当您使用代理时&#xff0c;您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中&#xff0c;我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

Mysql系列-1.Mysql基本使用

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

RT-Thread基于AT32单片机的485应用开发(二)

在上篇RT-Thread基于AT32单片机的485应用开发&#xff08;一&#xff09;中实现了RS485收发&#xff0c;但总觉得效率不高&#xff0c;函数封装也不完善。考虑到RS485总线应用都是主从式结构&#xff0c;比如工业领域常用的Modbus协议&#xff0c;都是以帧为单位进行收发&#…

【STK】手把手教你利用STK进行光电红外仿真04-STK/EOIR模块的实战操作1航天器星载相机对LEO卫星成像

STK/EOIR模块的实战操作1 任务目标及要求实战操作全过程1.建立仿真场景及环境2.目标航天器轨道设置3.跟踪航天器轨道设置4.EOIR传感器环境设置5.EOIR属性设置6.合成场景图像生成EOIR模块的这一系列前一部分如下: 【STK】手把手教你利用STK进行光电红外仿真01-STK/EOIR模块概述…

【python】内存管理和数据类型问题

一、内存管理 Python有一个自动内存管理机制&#xff0c;但它并不总是按照期望的方式工作。例如&#xff0c;如果创建了一个大的列表或字典&#xff0c;并且没有删除它&#xff0c;那么这个对象就会一直占用内存&#xff0c;直到Python的垃圾回收器决定清理它。为了避免这种情…

【Verilog】运算符

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 系列文章算术运算符关系运算符相等关系运算符逻辑运算符按位运算符归约运算符移位运算符条件运算符连接和复制运算符 算术运算符 …

全志T113开发板Qt远程调试

1引言 通常情况下工程师在调试Qt程序时&#xff0c;需要频繁制作镜像烧录到核心板来测试Qt程序是否完善&#xff0c;这样的操作既费时又费力。这时我们可以通过QtCreator设备功能&#xff0c;定义设备后&#xff0c;在x86_64虚拟机上交叉编译qt程序&#xff0c;将程序远程部署到…

cfa一级考生复习经验分享系列(十八)

考点回忆&#xff1a;其实机考大家的题目都不大一样&#xff0c;是抽题的形式&#xff0c;在这里只罗列一些我遇到的印象比较深&#xff0c;同时大家容易忽略或犯错的点。道德考了很多GIPS&#xff1b;经济学考了费雪方程、货币中性、价格歧视、需求的收入弹性计算&#xff1b;…

【机器学习前置知识】狄利克雷分布

在阅读本文前&#xff0c;建议先食用以下几篇文章以能更好地理解狄利克雷分布&#xff1a; 二项分布 Beta分布 多项分布 共轭分布 狄利克雷分布 狄利克雷分布(Dirichlet distribution)是Beta分布的扩展&#xff0c;把Beta分布从二元扩展到多元形式就是狄利克雷分布&#…

你Go代码写的像“鸭子”吗???

概 述 Go 语言也提供了接口类型&#xff0c;使得我们可以面向接口编程&#xff0c;将实现和接口分离。在我看来&#xff0c;软件的抽象之美也应该以此来表达&#xff0c;和 Java 语言不同的是 Go 并不是那么 “强制”&#xff0c;它使用了一种 鸭子类型 的方式让动态类型成为可…

three.js : tweenjs创建threejs动画

效果&#xff1a; 代码 <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div> <div class"box-right"><…

超凡脱俗的 sudo

文章目录 超凡脱俗的 sudo语法 没有sudo权限的用户指定用户执行命令列出目前sudo的权限使用sudo快速统计家目录的使用情况更多信息 超凡脱俗的 sudo Linux sudo命令以系统管理者的身份执行指令&#xff0c;也就是说&#xff0c;经由 sudo 所执行的指令就好像是 root 亲自执行。…

selenium自动发数据到console并获取返回数据

# 导入selenium库 from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By# 创建一个Chrome浏览器对象 options webdriver.ChromeOptions() #最大化窗口 options.add_argument("start-maximized") #自动打开开发者工具…

认识SpringBoot中的条件注解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

Hive之set参数大全-4

F 指定在使用 FETCH 命令提取查询结果时的序列化/反序列化器 hive.fetch.output.serde 是 Hive 的一个配置参数&#xff0c;用于指定在使用 FETCH 命令提取查询结果时的序列化/反序列化器。 以下是一个示例&#xff1a; -- 设置 hive.fetch.output.serde 为 org.apache.had…

虚幻引擎:开创视觉与创意的新纪元

先看看据说虚幻5做出来的东西吧&#xff1a; 虚幻引擎5&#xff01;&#xff01;&#xff01;4K画质PS5实机演示&#xff01; 好了&#xff0c;用文字认识一下吧&#xff1a; 虚幻引擎5.3对UE5的核心工具集作了进一步优化&#xff0c;涉及渲染、世界构建、程序化内容生成&…

Linux kernel 学习笔记

几个推荐的网站或邮件列表&#xff1a; https://elixir.bootlin.com/linux/latest/source&#xff0c; 在线查看Linux源码https://kernelnewbies.org/LinuxVersions&#xff0c;查看Linux kernel每一个历史版本的主要变化https://kernelnewbies.org/&#xff0c;是一方适合内核…