进度条类 QProgressDialog

目录

实例:模拟文件复制的进度

代码及详细注释如下:


1】采用QProgressBar进度条横向或纵向显示进度

2】采用QProgressDialog进度条对话框的方式显示进度(这是一种针对慢速过程的进度表示方式,文件数目1000都太小,不进行计算)

实例:模拟文件复制的进度

新建:Qt Widgets Application

项目名称:Progress

类名:ProgressDlg

基类:QDialog

不选择“创建界面”

 

代码及详细注释如下:

【main.cpp】

#include "progressdlg.h"            //使用哪个类就必须把包含该类的头文件引用过来(*.h文件中包含了相应类的定义)
#include <QApplication>             //每个使用[Qt图形化应用程序]中都必须使用一个QApplication对象
                                    //QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等
int main(int argc, char *argv[])    //这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。
                                    //所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{
    QApplication a(argc, argv);     // a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少
    ProgressDlg w;                  //创建ProgressDlg类的对象(包含该类头文件)
    w.show();                       //窗口部件可见
    return a.exec();                //main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。
                                    //exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}

【progressdlg.cpp

#include "progressdlg.h"

#include <QFont>
#include <QProgressDialog>

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("10000"));

    ProgressType = new QLabel;
    ProgressType->setText(tr("显示类型:"));

    comboBox = new QComboBox;
    comboBox->addItem(tr("ProgressBar"));
    comboBox->addItem(tr("ProgressDialog"));

    progressBar = new QProgressBar;

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

    //网格布局
    mainLayout = new QGridLayout(this);  //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(startBtn,3,1);

    mainLayout->setMargin(15);          //边距:控件与窗体边之间的距离
    mainLayout->setSpacing(10);         //间距:各控件之间的距离
   
    //事件关联
    connect(startBtn,SIGNAL(clicked()),this,SLOT(startProgress()));
}

ProgressDlg::~ProgressDlg()
{
}

void ProgressDlg::startProgress()
{
    bool ok;

    int num = FileNumLineEdit->text().toInt(&ok);   //模拟复制文件的过程:取文件的数目

    if(comboBox->currentIndex()==0)                 //【1】采用QProgressBar进度条横向或纵向显示进度
    {
        progressBar->setRange(0,num);               //进度条的步进范围

        for(int i=1;i<num+1;i++)
        {
            progressBar->setValue(i);               //进度条总的步进值 ++
        }
    }
    else if(comboBox->currentIndex()==1)                    //【2】采用QProgressDialog进度条对话框的方式显示进度(这是一种针对慢速过程的进度表示方式,文件数目1000都太小,不进行计算)
    {
        QProgressDialog *progressDialog = new QProgressDialog(this);//this

        QFont font("ZYSong18030",12);
        progressDialog->setFont(font);

        progressDialog->setWindowModality(Qt::WindowModal); //进度对话框采用【模态方式】进行显示(在显示进度的同时,其他窗口不响应输入信号)
        progressDialog->setMinimumDuration(5);              //进度对话框出现前需等待的时间为5秒。
                                                            //系统根据所需完成的工作量估算一个预计花费的时间,若大于设定的等待时间,则出现进度条对话框;若小于设定的等待时间,则不出现进度条对话框。

        progressDialog->setWindowTitle(tr("Plz wait"));     //进度对话框的窗体标题
        progressDialog->setLabelText(tr("Copying..."));     //进度对话框的显示文字信息
        progressDialog->setCancelButtonText(tr("Cancle"));  //进度对话框的取消按钮的显示文字

        progressDialog->setRange(0,num);                    //进度条的步进范围

        for(int i=1;i<num+1;i++)
        {
            progressDialog->setValue(i);                    //进度条总的步进值 ++

            if(progressDialog->wasCanceled())               //若取消被触发,则退出循环并关闭进度对话框
                return;
        }
    }
}

progressdlg.h

#ifndef PROGRESSDLG_H
#define PROGRESSDLG_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QProgressBar>
#include <QPushButton>
#include <QGridLayout>

class ProgressDlg : public QDialog   //ProgressDlg类继承自QDialog类
{
    Q_OBJECT                         //Q_OBJECT是个宏。作用是启动Qt5元对象系统的一些特性(如支持信号和槽等)。它必须放在类定义的私有区中。

public:
    ProgressDlg(QWidget *parent = 0);//构造函数:主要完成主界面的初始化,包括各控件的创建、布局、信号/槽的连接
    ~ProgressDlg();                  //析构函数

private:
    QLabel *FileNum;
    QLineEdit *FileNumLineEdit;
    QLabel *ProgressType;
    QComboBox *comboBox;
    QProgressBar *progressBar;
    QPushButton *startBtn;
    QGridLayout *mainLayout;

private slots:
    void startProgress();
};
#endif // PROGRESSDLG_H

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢奕冰2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值