【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss

本文介绍了如何在Qt中自定义QProgressBar样式,包括水平和竖直样式,并利用QTimer实现进度条动态更新和按钮控制。通过QSS设计和QTimer的使用,展示了如何创建响应式、可定制的进度条组件。
摘要由CSDN通过智能技术生成

往期回顾

【QT入门】 Qt自定义控件与样式设计之QComboBox样式表介绍-CSDN博客

【QT入门】 Qt自定义控件与样式设计之QCheckBox qss实现按钮开关-CSDN博客

【QT入门】 Qt自定义控件与样式设计之QPushButton点击按钮弹出菜单-CSDN博客

 【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss

一、两种样式

1、水平的QProgressBar

2、竖直的QProgressBar

二、qss设计

 1、水平qss设计

QProgressBar样式默认就是水平的。

这里的chunk表示里面的进度条属性

QProgressBar
{
      background:rgb(54,54,54);
      border:none;   /*无边框*/
      border-radius:5px;
      text-align:center;   /*文本的位置*/
      color: rgb(229, 229, 229);  /*文本颜色*/
}
 
QProgressBar::chunk 
{
      background-color:rgb(58, 154, 255);
      border-radius:4px;
}

2、竖直qss设计 

QProgressBar:vertical
{
 border-radius:5px;
 background-color:darkgray;
 text-align:center;
 padding-left: 5px; padding-right: 4px; padding-bottom: 2px; 
}

QProgressBar::chunk:vertical
{
 background-color:#06B025;
 margin:1px;
}

三、逻辑设计

这里我们就看一个,默认的水平样式设计,我们用到了一个新东西:QTimer定时器。

1、QTimer

QTimer是Qt框架中提供的定时器类,用于在指定时间间隔后触发特定的操作。它是基于事件循环的,可以在GUI应用程序中用于执行周期性任务或延迟任务。

1.1重要特性
定时器的工作方式:QTimer通过Qt的事件循环来实现定时功能。在每次事件循环迭代时,QTimer会检查是否已经到达设定的时间间隔,若是,则发出timeout()信号。
设置定时器的时间间隔:通过调用setInterval(milliseconds)方法设置定时器的时间间隔,以毫秒为单位。这个时间间隔指定了QTimer何时发出timeout()信号。
启动和停止定时器:使用start()方法启动定时器,使用stop()方法停止定时器。
单次触发和重复触发:可以通过setSingleShot(true)来设置定时器为单次触发模式,这样定时器只会在第一次超时后发出timeout()信号。默认情况下,定时器是重复触发的。
处理定时器超时事件:可以连接timeout()信号到槽函数,以便在定时器超时时执行特定操作。
精确度:QTimer的精确度受到事件循环的影响,如果事件循环的处理时间较长,可能会导致定时器的触发时间有所偏差。
线程安全性:       QTimer是线程安全的,可以在任何线程中创建和操作定时器对象。
应用场景:QTimer常用于定时执行UI更新、周期性任务、延迟执行任务等场景。

2、控制QProgressBar进度

用两个按钮来控制进度条,用了一个定时器QTimer,当点击开始信号,连接信号槽,定时器对象m_timer调用start方法,参数是延迟时间

void Widget::on_btnStart_clicked()
{
    //用于启动某个操作,并指定在多少毫秒后执行,延迟时间100毫秒
    //这个延迟时间跟操作系统有关,不同的精度不一样
    m_timer->start(100);
}

void Widget::on_btnStop_clicked()
{
    m_timer->stop();
}

3、响应点击信号实现进度条 

当启动后,每到一次延迟时间,QTimer的timeout信号被触发,执行相应的槽函数,value值++并设置给progressBar,这样就实现了进度条、

3.1定义一个定时器来用于控制进度条
    m_timer = new QTimer(this);
    
    //设置初始值为0
    ui->progressBar->setValue(0);
    //设置范围为0-100
    ui->progressBar->setRange(0, 100);
    ui->progressBar->setFormat("%p");
setValue(0);设定初值
setRange(0, 100);设置进度条范围
setFormat("%p");设置显示的进度数字格式

这里这个显示的进度数字格式可以留意一下:

1、默认值为“%p%”          显示为进度数+%
2、%p-替换为已完成的百分比。显示只有进度的数字
3、%v-替换为当前值。       显示只有进度的数字
4、%m-替换为步骤总数。     显示一直是设置的最大值
3.2槽函数链接
    //槽函数连接,某个计时器或定时操作已经到达预定的时间点时触发timeout这个信号
    connect(m_timer,&QTimer::timeout,[=]{
        static int value=0;

        ui->progressBar->setValue(value++);

    });

通过以上逻辑,我们就是实现了一个点击按钮,自动增加进度的QProgressBar进度条


以上就是QProgressBar实现进度条的基本示例。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值