Qt进度条

Qt提供了两种显示进度条的方式:

1.一种是QProgressBar,提供了一种横向或纵向显示进度的控件表示方式;

其有几个重要的属性:

(1) minimum、maximum决定进度条指示的最小值和最大值

(2) format决定进度条显式文字的格式,可以有三种显式方式,即%p%,%v,%m。其中,%p%显示完成的百分比,这是默认显示方式;%v显示当前的进度值;%m显示总的步进值。

(3)invertedAppearance 可以使进度条以反方向显示进度。

还有一种是QProgressDiolog,提供了一种针对慢速过程的进度对话框表示方式,都用来用来描述任务的完成情况。

其有几个重要的属性:

(1) mininum、maximum 表示进度条的最大值和最小值,决定了进度条的变化范围

(2) mininumDuration为进度条对话框出现的等待时间

2.进度条对话框的使用方法有模态和非模态两种方式。

模态方式:使用 QApplication::processEvent() 使事件循环保持正常进行状态,确保应用不会阻塞

非模态方式:需用QTime实现定时设置进度条的值。

.h

#ifndef PROGRESSDLG_H
#define PROGRESSDLG_H
#include 
#include 
#include 
#include 
#include 
#include 
#include 
class ProgressDlg : public QDialog
{
    Q_OBJECT

public:
    ProgressDlg(QWidget *parent = nullptr);
    ~ProgressDlg();

private slots:
    void startProgress();

private:
    QLabel *labFileNum;
    QLineEdit  *lineFileNum;
    QLabel  *labProgressType;

    QComboBox *comboBox;
    QProgressBar *progressBar;
    QPushButton *btnStar;
    QGridLayout *mainLayout;


};
#endif // PROGRESSDLG_H

.cpp

#include "progressdlg.h"
#include 
ProgressDlg::ProgressDlg(QWidget *parent)
    : QDialog(parent)
{

    QFont font("ZYSong18030",12);
    setFont(font);
    setWindowTitle(QStringLiteral("Progress"));
    labFileNum=new QLabel;
    labFileNum->setText(QStringLiteral("文件数目"));
    lineFileNum=new QLineEdit;
    lineFileNum->setText(QStringLiteral("100000"));

    labProgressType=new QLabel;
    labProgressType->setText(QStringLiteral("显式类型"));
    comboBox=new QComboBox;
    comboBox->addItem(QStringLiteral("progressBar"));
    comboBox->addItem(QStringLiteral("progressDialog"));


    progressBar=new QProgressBar;
    btnStar=new QPushButton;
    btnStar->setText(QStringLiteral("开始"));

    mainLayout=new QGridLayout(this);
    mainLayout->addWidget(labFileNum,0,0);
    mainLayout->addWidget(lineFileNum,0,1);

    mainLayout->addWidget(labProgressType,1,0);
    mainLayout->addWidget(comboBox,1,1);

    mainLayout->addWidget(progressBar,2,0,1,2);
    mainLayout->addWidget(btnStar,3,0);

    mainLayout->setMargin(15);
    mainLayout->setSpacing(10);


    connect(btnStar,&QPushButton::clicked,[this](){ startProgress();});

}

ProgressDlg::~ProgressDlg()
{

}

void ProgressDlg::startProgress()
{
   bool ok;
   int num=lineFileNum->text().toInt(&ok);//获取当前需要复制的文件数目
   if(comboBox->currentIndex()==0) //采用进度条的方式显示进度
   {
      progressBar->setRange(0,num);  //设置进度条的步进范围从0到需要复制的文件数目
      for(int i=1;isetValue(i); //模拟每一个文件的复制过程
                                    //进度条总的步进值为需要复制的文件数目。当复制完一个文件后,步进值加1

      }
   }
   else if(comboBox->currentIndex()==1)//采用进度进度对话框的方式显示进度
   {
       //创建一个进度对话框
       QProgressDialog *progressDialog=new QProgressDialog;
       QFont font("ZYSong18030",12);
       progressDialog->setFont(font);
       progressDialog->setWindowModality(Qt::WindowModal);//设置模态显示方式
       progressDialog->setMinimumDuration(5);//对话框出现需要等待的时间
       progressDialog->setWindowTitle(QStringLiteral("Please Wait"));
       progressDialog->setLabelText(QStringLiteral("Copying....."));
       progressDialog->setCancelButtonText(QStringLiteral("Cancel"));
       progressDialog->setRange(0,num);
       for(int i=1;isetValue(i);
           if(progressDialog->wasCanceled())
             return;
       }
   }


}

Qt进度条_第1张图片Qt进度条_第2张图片

Qt进度条_第3张图片 

 

你可能感兴趣的:(qt)