Qt 基础之进度条 - QProgressDialog和QProgressBar

引言

进度条的作用是用于显示任务或操作的进度,以便用户了解当前任务的完成情况。它可以提供实时、可视的反馈,让用户知道任务的进展情况,以及剩余的时间或工作量。进度条可以用于各种应用场景,比如文件下载、软件安装、视频播放、上传文件、数据处理等,帮助用户更好地管理和掌控任务的执行。

  • QProgressDialogQProgressBar用来是Qt框架中用于显示进度条的两个类,它们都是基于QWidget的派生类,用于在应用程序中显示任务的进度。

一、QProgressDialog例程

  • QProgressDialog是一个具有取消按钮的对话框。

1.1 效果展示

在这里插入图片描述
点击按钮弹出进度条对话框,点击不读了关闭对话框。

1.2 源码

void MainWindow::on_pushButton_clicked()
{
   
    //创建一个进度条对话框 .....
    QProgressDialog *progressDialog = new QProgressDialog(this);
    progressDialog->setMinimumWidth(300);               // 设置最小宽度
    progressDialog->setWindowModality(Qt::NonModal);    // 非模态,其它窗口正常交互  Qt::WindowModal 模态
    progressDialog->setMinimumDuration(0);              // 等待0秒后显示
    progressDialog->setWindowTitle(tr("进度条框"));      // 标题名
    progressDialog->setLabelText(tr("正在读取"));        // 标签的
    progressDialog->setCancelButtonText(tr("不读了"));   // 取消按钮
    progressDialog->setRange(0, 10);
    for(int i=1; i <= 10; i++)
    {
   
        if(progressDialog->wasCanceled())
            return;
        progressDialog->setValue(i);
        // 延时
        QEventLoop eventloop;
        QTimer::singleShot(1000, &eventloop, SLOT(quit()));
        eventloop.exec();
    }
}

二、QProgressBar例程

2.1 效果展示

在这里插入图片描述
在窗口中添加了一个progressBar,直接设置其RangeValue即可。

2.2 源码

void MainWindow::on_pushButton_clicked()
{
   
    // 创建一个进度条对话框 .....
    QProgressDialog *progressDialog = new QProgressDialog(this);
    progressDialog->setMinimumWidth(300);               // 设置最小宽度
    progressDialog->setWindowModality(Qt::NonModal);    // 非模态,其它窗口正常交互  Qt::WindowModal 模态
    progressDialog->setMinimumDuration(0);              // 等待0秒后显示
    progressDialog->setWindowTitle(tr("进度条框"));      // 标题名
    progressDialog->setLabelText(tr("正在读取"));        // 标签的
    progressDialog->setCancelButtonText(tr("不读了"));   // 取消按钮
    progressDialog->setRange(0, 10);

    // progressBar
    ui->progressBar->setRange(0, 10);

    // 显示进度
    for(int i=1; i <= 10; i++)
    {
   
        if(progressDialog->wasCanceled())
            return;
        progressDialog->setValue(i);
        ui->progressBar->setValue(i);
        // 延时
        QEventLoop eventloop;
        QTimer::singleShot(1000, &eventloop, SLOT(quit()));
        eventloop.exec();
    }
}

三、QProgressBar进阶

QProgressDialog 约等于 对话框 + QProgressBar + 按钮,以QProgressBar为切入点,深入了解Qt进度条.

    1. 先设置最大值maximum和最小值minimum,然后给它提供当前值v时显示已完成的百分比。百分比的计算方法 = ( v − m i n i m u m ) / ( m a x i m u m − m i n i m u m ) (v - minimum) / (maximum-minimum) (vminimum)/(maximumminimum)
      在这里插入图片描述
void MainWindow::on_pushButton_clicked()
{
   
    i = 0;
    // 实现定时事件
    connect(timer, &QTimer::timeout, [this](){
   
        i++;
        ui->progressBar->setValue(i);
        if(i == ui->progressBar->maximum()){
   
            timer->stop();
        }
    });

    // progressBar
    ui->progressBar->setRange(0, 10);

    // 开启定时器
    timer->start(1000);
}
    1. 获取其常用的属性
      在这里插入图片描述
    // progressBar
    ui->progressBar->setRange(0, 10);
    qDebug()<<"当前值:"<<ui->progressBar->value();
    qDebug()<<"最大值:"<<ui->progressBar->maximum();
    qDebug()<<"最小值:"<<ui->progressBar->minimum();
    qDebug()<<"方向:"<<ui->progressBar->orientation();
    qDebug()<<"格式:"<<ui->progressBar->format();
    1. 当其最大值 = 最小值 = 0,进度条会没有显示但一直在动
      在这里插入图片描述
void MainWindow::on_pushButton_clicked()
{
   
    i = 0;
    // 实现定时事件
    connect(timer, &QTimer::timeout, [this](){
   
        i++;
        ui->progressBar->setValue(i);
        if(i == ui->progressBar->maximum()){
   
            timer->stop();
        }
    });

    // progressBar
    ui->progressBar->setRange(0, 0);

    // 开启定时器
    timer->start(1000);
}
    1. 格式format:%p - 百分比. %v - 当前值. %m - 总值. ui->progressBar->setFormat("%p"); // %v %m
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    1. 自定义格式:ui->progressBar->setFormat("%p% %v/%m");
      在这里插入图片描述

相关推荐

  1. Qt基础-进度控件QPrgressBar详解

    2024-02-22 11:16:02       52 阅读
  2. Qt/QML编程路:图片进度的实现(50)

    2024-02-22 11:16:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 11:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 11:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 11:16:02       82 阅读
  4. Python语言-面向对象

    2024-02-22 11:16:02       91 阅读

热门阅读

  1. 喝点小酒-胡诌“编程语言学习”

    2024-02-22 11:16:02       46 阅读
  2. MySQL物理拷贝一张Innodb表的方法

    2024-02-22 11:16:02       42 阅读
  3. 记录 | 非root用户使用docker的方法

    2024-02-22 11:16:02       46 阅读
  4. 下拉框组件的封装(element ui )

    2024-02-22 11:16:02       49 阅读
  5. 通过傅里叶变换进行音频变声变调

    2024-02-22 11:16:02       50 阅读
  6. 关于Linux搭建DedeCMS说明

    2024-02-22 11:16:02       59 阅读
  7. 【二叉树】遍历及构造

    2024-02-22 11:16:02       46 阅读
  8. HBASE学习九:数据写入 -> BulkLoad

    2024-02-22 11:16:02       52 阅读
  9. 每天一个数据分析题(一百六十四)

    2024-02-22 11:16:02       53 阅读