Qt提供了两种显示进度条的方式
一种是 QProgressBar,提供了一种横向或纵向显示进度的控件表示方式,用来描述任务的完成情况;
另一种是 QProgressDialog,提供了一种针对慢速过程的进度对话框表示方式,用于描述任务完成的进度情况。
QProgressBar实例
QProgressDialog实例
实例代码
.h文件
#pragma once
#include <QDialog>
#include "ui_ProgressDlg.h"
#include <QLabel>
#include <QLineEdit>
#include <QProgressBar>
#include <QComboBox>
#include <QPushButton>
#include <QLayout>
class ProgressDlg : public QDialog
{
Q_OBJECT
public:
ProgressDlg(QWidget *parent = Q_NULLPTR);
~ProgressDlg();
private slots:
void startProgress();
private:
Ui::ProgressDlg ui;
void Init();
void ConnectSlots();
QLabel *FileNum;
QLineEdit *FileNumLineEdit;
QLabel *ProgressType;
QComboBox *comboBox;
QProgressBar *progressBar;
QPushButton *starBtn;
QGridLayout *mainLayout;
};
.cpp文件
#include "ProgressDlg.h"
#include <QProgressDialog>
#include <QFont>
ProgressDlg::ProgressDlg(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
Init();
ConnectSlots();
}
ProgressDlg::~ProgressDlg()
{
}
void ProgressDlg::Init()
{
QFont font("ZYSong18030", 12);
setFont(font);
setWindowTitle(QString::fromLocal8Bit("Progress"));
FileNum = new QLabel;
FileNum->setText(QString::fromLocal8Bit("文件数目: "));
FileNumLineEdit = new QLineEdit;
FileNumLineEdit->setText(QString::fromLocal8Bit("100000"));
ProgressType = new QLabel;
ProgressType->setText(QString::fromLocal8Bit("显示类型: "));
comboBox = new QComboBox;
comboBox->addItem(QString::fromLocal8Bit("progressBar"));
comboBox->addItem(QString::fromLocal8Bit("progressDialog"));
progressBar = new QProgressBar;
starBtn = new QPushButton;
starBtn->setText(QString::fromLocal8Bit("开始"));
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);
}
void ProgressDlg::ConnectSlots()
{
connect(starBtn, SIGNAL(clicked()), this, SLOT(startProgress()));
}
//**************************************** SLOTS *******************************************
void ProgressDlg::startProgress()
{
bool ok;
int num = FileNumLineEdit->text().toInt(&ok);
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);
progressDialog->setWindowTitle(QString::fromLocal8Bit("Please Wait..."));
progressDialog->setLabelText(QString::fromLocal8Bit("Copying..."));
progressDialog->setCancelButtonText(QString::fromLocal8Bit("Cancel"));
progressDialog->setRange(0, num);
for (int i = 1; i < num + 1; i++)
{
progressDialog->setValue(i);
if (progressDialog->wasCanceled())
return;
}
}
}