QT提供两种显示进度条的方式,一种是QProgressBar,另一种是QProgressDialog。标准进度条包括一个进度显示条,一个取消按钮和一个标签。
下面代码实现以上两种进度条。创建工程时,取消创建界面选项。
项目目录结构如图:
dialog.h中代码如下
#ifndef DIALOG_H
#define DIALOG_H
#include
#include "QLabel"
#include "QLineEdit"
#include "QProgressBar"
#include "QPushButton"
#include "QGridLayout"
#include "QComboBox"
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void startProgress();
private:
QLabel *FileNum;
QLineEdit *FileNumLineEdit;
QLabel *ProgressType;
QComboBox *comboBox;
QProgressBar *progressBar;
QPushButton *pushButton;
QGridLayout *mainLayout;
};
#endif // DIALOG_H
dialog.cpp中代码如下:
#include "dialog.h"
#include "QProgressDialog"
#include "QFont"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
QFont font("华文楷体",16); //设置字体
setFont(font);
setWindowTitle(tr("进度条"));
FileNum = new QLabel; //设计界面
FileNum->setText(tr("文件数目:"));
FileNumLineEdit = new QLineEdit;
ProgressType = new QLabel;
ProgressType->setText(tr("显示类型:"));
comboBox = new QComboBox;
comboBox->addItem("QProgressBar进度条");
comboBox->addItem("QProgressDialog进度条");
progressBar = new QProgressBar;
pushButton = new QPushButton;
pushButton->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(pushButton,3,0,1,2);
mainLayout->setMargin(15);
mainLayout->setSpacing(10);
connect(pushButton,SIGNAL(clicked()),this,SLOT(startProgress()));
}
Dialog::~Dialog()
{
}
void Dialog::startProgress()
{
bool ok;
int num = FileNumLineEdit->text().toInt(&ok); //获取要复制的文件数目
if(comboBox->currentIndex() == 0) //采用进度条的方式显示进度
{
progressBar->setRange(0,num); //设置进度条的范围,从0到num
for(int i=1;isetValue(i); //模拟每一个文件的复制过程
}
else if(comboBox->currentIndex() == 1) //进度对话框的方式显示进度
{
QProgressDialog *progressDialog = new QProgressDialog(this);
QFont font("隶书",16);
progressDialog->setFont(font);
progressDialog->setWindowModality(Qt::WindowModal);
progressDialog->setMinimumDuration(5);
progressDialog->setWindowTitle(tr("Please Wait"));
progressDialog->setLabelText(tr("copy..."));
progressDialog->setCancelButtonText(tr("取消")); //设置进度对话框的取消按钮的显示文字
progressDialog->setRange(0,num); //设置进度条的范围,从0到num
for(int i=1;isetValue(i);
if(progressDialog->wasCanceled()) //检测取消按钮是否被触发,如果触发,则退出循环并关闭进度条
return ;
}
}
}
main.cpp中代码如下:
#include "dialog.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
两种进度条的运行结果
项目源码:https://download.csdn.net/download/sehanlingfeng/11169961