第四章 Qt5基本对话框——实例:进度条QProgressBar

本文介绍了如何使用Qt中的ProgressDlg类创建一个对话框,用于显示文件复制的进度。对话框提供两种显示方式:进度条和进度对话框,用户可以选择不同类型的进度更新。
摘要由CSDN通过智能技术生成

 progressdlg.h

#ifndef PROGRESSDLG_H
#define PROGRESSDLG_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QComboBox>
#include <QLayout>
#include <QProgressBar>
#include <QProgressDialog>

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"

ProgressDlg::ProgressDlg(QWidget *parent)
    : QDialog(parent)
{
    QFont font("黑体",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;
    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()));

}

ProgressDlg::~ProgressDlg()
{

}

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("楷书",12);
        progressDialog->setFont(font);
        progressDialog->setWindowModality(Qt::WindowModal);//设置进度对话框采用模态方式进行显示,
                                                           //即在显示进度的同时,其他窗口将不相应输入信号
        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;
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值