程序
//.h
#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("Progress");
FileNum=new QLabel;
FileNum->setText("文件数目");
FileNumLineEdit=new QLineEdit;
FileNumLineEdit->setText("100000");
ProgressType=new QLabel;
ProgressType->setText("显示类型:");
comboBox=new QComboBox;
comboBox->addItem("progressBar");
comboBox->addItem("progressDialog");
progressBar=new QProgressBar;
starBtn=new QPushButton;
starBtn->setText("开始");
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();
if(comboBox->currentIndex()==0)//采用进度条的方式显示进度
{
progressBar->setRange(0,num);//设置进度条的步进范围
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);//设置进度对话框出现需要等待的的时间,默认为4s
progressDialog->setWindowTitle("Please Wait");
progressDialog->setLabelText("Copying~~~");
progressDialog->setRange(0,num);
for(int i=1;i<num+1;i++)
{
progressDialog->setValue(i);
if(progressDialog->wasCanceled())//点击取消键停止
return;
}
}
}
效果展示