QT学习:进度条

一般来说,在处理长时间任务时需要提供进度条用于显示时间,告诉用户当前任务的进展情况。进度条对话框的使用方法有模态方式与非模态方式两种。相比之下模态方式的使用比较简单方便,但必须使用AplaicotoprocessEventSt使事件循环保持正常进行状态,以确保应用不会被阻塞。非模态方式是通过QTime实现定时设置进度条的值。QTime类的用法我们在后面将会讲解。
Qt提供了两种显示进度条的方式
(1)QProgressBar :提供了一种横向或纵向显示进度的控件表示方式,用来描述任务的完成情况。
(2)QProgressDialog :提供了一种针对慢速过程的进度对话框表示方式,用于描述任务完成的进度情况。标准的进度条对话框包括一个进度显示条、一个“取消” 按钮及一个标签。
下面让我们用代码来详细展示:
头文件代码:

#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

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;
    FileNum->setText(tr("文件数目:"));
    FileNumLineEdit =new QLineEdit;
    FileNumLineEdit->setText(tr("100000"));
    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()));
}

void ProgressDlg::startProgress()
{
    bool ok;
    int num =FileNumLineEdit->text().toInt(&ok);//获取当前需要复制的文件数目
    if(comboBox->currentIndex()==0)     	//采用进度条的方式显示进度
    {
        progressBar->setRange(0,num);		//设置进度条的范围从0到需要复制的文件数目
        for(int i=1;i<num+1;i++)
        {
            progressBar->setValue(i);		//模拟每一个文件的复制过程
        }
    }
    else if(comboBox->currentIndex()==1)	//采用进度对话框显示进度
    {
        //创建一个进度对话框
        QProgressDialog *progressDialog=new QProgressDialog(this);
        QFont font("ZYSong18030",12);
        progressDialog->setFont(font);
        progressDialog->setWindowModality(Qt::WindowModal);     //设置进度对话框采用模态方式进行显示,即在显示进度的同时,其它窗口将不响应输入信号
        progressDialog->setMinimumDuration(5);					//设置进度对话框出现需等待的时间,此出设定为5s,默认为4s
        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);						//模拟每个文件的复制过程,进度条总的步进值为需要复制的文件数目。当复制完一个文件后,步进值加1
            if(progressDialog->wasCanceled())					//检测”取消“按钮是否被触发,若触发则退出循坏并关闭进度对话框。
                return;
        }
    }
}

ProgressDlg::~ProgressDlg()
{

}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值