Qt学习笔记14:进度条

进度条

进度条对话框的使用方法有两种,一种是模态方式,比较简单,但必须使用QApplication::processEvents()使事件循环保持正常进行状态从而确保应用不会阻塞。
另一种是非模态方式,需要通过QTime实现定时设置进度条的值。
Qt显示了两种显示进度条的方式:一种是QProgressBar,提供了一种横向或纵向显示进度的控件表示方式,用来描述任务的完成情况;另一种是QProgressDialog,提供了一种针对慢速过程的进度对话框表示方法,用于描述任务完成的进度情况。标准的对话框包括一个进度显示条,一个取消按钮和一个标签。
下面我们用代码来演示进度条的实现。
首先,新建项目Qt Widget Application,项目名称为“Progress",类名称为progressdlg,基类选择”QDialog"。
在progressdlg.h文件写入:

#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_OBJECT
public:
    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

在progressdlg.cpp文件写入:

#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(tr("文件数目: "));
    FileNumLineEdit = new QLineEdit(tr("10000"));
    ProgressType = new QLabel(tr("显示类型"));
    comboBox = new QComboBox;
    comboBox->addItem(tr("ProgressBar"));
    comboBox->addItem(tr("progressDialog"));
    progressBar = new QProgressBar;
    starBtn = new QPushButton(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(bool)),this,SLOT(startProgress()));
}

progressdlg::~progressdlg()
{

}

void progressdlg::startProgress()
{
    int num = FileNumLineEdit->text().toInt();//获取LineEdit的信息转化为int类型
    if(comboBox->currentIndex() == 0)//comboBox选择第一个
    {
        progressBar->setRange(0,num);//设置范围
        for(int i = 1;i < num + 1;i++)
        {
            progressBar->setValue(i);//模拟复制过程,设置进度条的进度
        }
    }
    else if(comboBox->currentIndex() == 1)//comboBox选择第二个
    {
    //创建一个进度对话框
        QProgressDialog *progressDialog = new QProgressDialog(this);
        QFont font("ZYSong 18030",12);
        progressDialog->setFont(font);
    //设置进度对话框采用模态方式进行显示,即显示进度的同时,其他窗口不响应输入信号
        progressDialog->setWindowModality(Qt::WindowModal);
    //设置进度对话框出现需等待的时间,默认为4秒,这里是5秒
        progressDialog->setMinimumDuration(5);
        progressDialog->setWindowTitle(tr("Please Wait"));
        progressDialog->setLabelText(tr("Copying..."));
        progressDialog->setCancelButtonText(tr("Cancel"));//设置对话框取消按钮显示的文字
        progressDialog->setRange(0,num);
        for(int i = 1;i < num + 1;i++)
        {
            progressDialog->setValue(i);
            if(progressDialog->wasCanceled())//检测到取消键被触发则关闭进度对话框
                return;
        }
    }
}

显示结果如下:

在这里插入图片描述
QProgressBar类有以下几个重要的属性:
1.minimum、maximum:决定进度条指示的最大值和最小值
2.format:决定进度条显示文字的格式,可以有三种显示格式
2.1.%p% :显示完成的百分比
2.2.%v :显示当前的进度值
2.3%m :显示总的步进值

3.invertedAppearance:可以使进度条以反方向显示进度。

QProgressDialog也有几个重要的属性值:
1.minimum、maximum:同上
2.minimumDuration:进度条对话框出现前的等待时间
系统根据所需完成的工作量估计一个预计话费的时间,若大于设定的等待时间,则出现对话框;若小于设定的时间则不出现进度对话框

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值