首页 > 代码库 > 【Qt5开发及实例】10、关于进度条的显示

【Qt5开发及实例】10、关于进度条的显示

平常我们下载东西总会有一个显示下载了多少的进度条,我们今天来实现一下。


技术分享技术分享

这里有两种显示方式


可以选择,第一个是用了

QProgressBar控件,第二个是用了QProgressDialog控件


progressdlg.h

/**
* 书本:【Qt5开发及实例】
* 功能:为了实现进度条的显示
* 文件:progressdlg.h
* 时间:2015年1月2日15:27:10
* 作者:cutter_point
*/
#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 *startBtn;
  QGridLayout *mainLayout;

};

#endif // PROGRESSDLG_H

progressdlg.cpp

/**
* 书本:【Qt5开发及实例】
* 功能:完成界面的显示的定义
* 文件:progressdlg.cpp
* 时间:2015年1月2日15:27:37
* 作者:cutter_point
*/
#include "progressdlg.h"

#include <QProgressDialog>    //这个显示进度条的慢速过程的进度框
#include <QFont>
#include <iostream>

using namespace std;

ProgressDlg::ProgressDlg(QWidget *parent)
  : QDialog(parent)
{

  //完成界面的初始化
  QFont font("宋体", 12);
  setFont(font);
  setWindowTitle(tr("Progress"));



  FileNum = new QLabel;
  FileNum->setText(tr("the file num"));   //文件的数目
  FileNumLineEdit = new QLineEdit;
  FileNumLineEdit->setText(tr("100000"));   //默认值

  ProgressType = new QLabel;
  ProgressType->setText(tr("the show type"));     //显示的类型
  comboBox = new QComboBox;
  comboBox->addItem(tr("progressBar"));   //第一种显示方式
  comboBox->addItem(tr("progressDialog"));      //第二种显示方式

  progressBar = new QProgressBar;
  progressBar->setFormat("%p%");    //按完成的百分比显示

  startBtn = new QPushButton;
  startBtn->setText(tr("begin"));    //开始

//  cout<<"???3333"<<endl;

  mainLayout = new QGridLayout(this);   //网格布局
//  cout<<"???3333____?????11111"<<endl;
  mainLayout->addWidget(FileNum, 0, 0);
  mainLayout->addWidget(FileNumLineEdit, 0, 1);
//  cout<<"???33333__?????1111111___???222222"<<endl;
  mainLayout->addWidget(ProgressType, 1, 0);

//  cout<<"???3333____??????22222"<<endl;

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

//  cout<<"???3333____111111111"<<endl;

  mainLayout->setMargin(15);    //设置间隔大小
  mainLayout->setSpacing(10);

//   cout<<"???4444"<<endl;

  //连接
  connect(startBtn, SIGNAL(clicked()), this, SLOT(startProgress()));

}

//进度条的具体工作显示槽函数
void ProgressDlg::startProgress()
{
  bool ok;
  int num = FileNumLineEdit->text().toInt(&ok);     //把文本转换为int类型值

  if(comboBox->currentIndex() == 0)     //如果选择的是第一个的话ProgressBar模式
    {
      progressBar->setRange(0, num);      //设置范围,最小值和最大值
      for(int i = 1; i <= num; ++i)
      {
        progressBar->setValue(i);     //设置当前值
        cout<<i<<endl;
      }
    }
  else if(comboBox->currentIndex() == 1)    //如果选择的是第二个显示方式的话, ProgressDialog
    {
         QProgressDialog *progressDialog = new QProgressDialog(this);
         QFont font("宋体", 12);
         progressDialog->setFont(font);
         progressDialog->setWindowModality(Qt::WindowModal);      //采用模拟的方式进行显示,即显示进度的同时,其他窗口将不响应输入信号
         progressDialog->setMinimumDuration(5000);   //设置进度条显示的等待时间,5秒
         progressDialog->setWindowTitle(tr("Please Wait"));   //设置标题的显示时间
         progressDialog->setLabelText(tr("Copying..."));
         progressDialog->setCancelButtonText(tr("Cancel"));     //退出按钮名字
         progressDialog->setRange(0, num);    //设置显示的范围

         for(int i =  1; i <= num; ++i)
           {
             progressDialog->setValue(i);   //设置当前的值
//             cout<<i<<endl;
             //如果检测到按钮取消被激活,就跳出去
             if(progressDialog->wasCanceled())
               return;

           }

    }

}

ProgressDlg::~ProgressDlg()
{

}

main.cpp

#include "progressdlg.h"
#include <QApplication>

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  ProgressDlg w;
  w.show();

  return a.exec();
}

OK ,单纯为了大家爽一爽!!

技术分享技术分享


让你开心,让你笑技术分享


我去吧项目上传一下,下次给连接吧

连接:欲知后事如何,且听下回分解。技术分享









【Qt5开发及实例】10、关于进度条的显示