具体代码如下:
在main.cpp中
#include "progress_bar.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Progress_bar w;
w.show();
return a.exec();
}
在.h中
#ifndef PROGRESS_BAR_H
#define PROGRESS_BAR_H
#include <QDialog>
#include <QDebug>
#include <QLabel>
#include <QLineEdit>
#include <QProgressBar>
#include <QComboBox>
#include <QPushButton>
#include <QGridLayout>
#include <QProgressDialog>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Progress_bar; }
QT_END_NAMESPACE
class Progress_bar : public QWidget
{
Q_OBJECT
public:
Progress_bar(QWidget *parent = nullptr);
~Progress_bar();
private:
Ui::Progress_bar *ui;
private slots:
void on_btn_start_clicked();
};
#endif // PROGRESS_BAR_H
在.cpp中
#include "progress_bar.h"
#include "ui_progress_bar.h"
#define DELAY 1000 //模拟控制进度条速度
Progress_bar::Progress_bar(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Progress_bar)
{
ui->setupUi(this);
ui->progressBar->setValue(0);
}
Progress_bar::~Progress_bar()
{
delete ui;
}
void Progress_bar::on_btn_start_clicked()
{
int file_num = ui->lineEdit_File->text().toInt() * DELAY;
QFont font("微软雅黑",12);
if(ui->comboBox_Type->currentText() == "QProgressBar"){
ui->progressBar->setRange(0,file_num);
for(int i = 0; i <= file_num; i++)
{
ui->progressBar->setValue(i);
if(i == file_num)
{
ui->progressBar->setMaximum(0); //设置成忙碌状态
QMessageBox *mesbox = new QMessageBox(this);
mesbox->information(this,tr("提示"),tr("下载完毕"));
ui->progressBar->setMaximum(1);
ui->progressBar->setValue(0); //初始化
}
}
}
else if(ui->comboBox_Type->currentText() == "QProgressDialog"){
//创建一个进度对话框
QProgressDialog *progressDialog = new QProgressDialog(this);
//设置字体
progressDialog->setFont(font);
//取消?按钮
progressDialog->setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
//设置进度对话框采用模态方式进行,即显示进度的同时,其他窗口将不响应输入信号
progressDialog->setWindowModality(Qt::WindowModal);
//设置进度对话框出现需等待的时间,默认为4s
progressDialog->setMinimumDuration(5);
//设置进度对话框的窗体标题
progressDialog->setWindowTitle(tr("ProgressDialog"));
progressDialog->setLabelText(tr("下载中..."));
progressDialog->setCancelButtonText(tr("取消"));
progressDialog->setRange(0,file_num);
for(int i = 0; i <= file_num; i++)
{
progressDialog->setValue(i);
if(i == file_num)
{
ui->progressBar->setMaximum(0); //设置成忙碌状态
QMessageBox *mesbox = new QMessageBox(this);
mesbox->information(this,tr("提示"),tr("下载完毕"));
ui->progressBar->setMaximum(1);
ui->progressBar->setValue(0); //初始化
}
if(progressDialog->wasCanceled()){
delete progressDialog;
return;
}
}
}
}
ui界面如下
简单的说就是可以通过设定文件数量,控制进度条的快慢(数量越多,进度条速度越慢),显示类型有两种,分别是QProgressBar和QProgressDialog。