平常我们下载东西总会有1个显示下载了多少的进度条,我们今天来实现1下。
这里有两种显示方式
可以选择,第1个是用了
QProgressBar控件,第2个是用了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")); //第1种显示方式
comboBox->addItem(tr("progressDialog")); //第2种显示方式
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) //如果选择的是第1个的话ProgressBar模式
{
progressBar->setRange(0, num); //设置范围,最小值和最大值
for(int i = 1; i <= num; ++i)
{
progressBar->setValue(i); //设置当前值
cout<<i<<endl;
}
}
else if(comboBox->currentIndex() == 1) //如果选择的是第2个显示方式的话, 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 ,单纯为了大家爽1爽!!
让你开心,让你笑
我去吧项目上传1下,下次给连接吧
连接:欲知后事如何,且听下回分解。