QT5代码实现进度条

QT提供两种显示进度条的方式,一种是QProgressBar,另一种是QProgressDialog。标准进度条包括一个进度显示条,一个取消按钮和一个标签。

下面代码实现以上两种进度条。创建工程时,取消创建界面选项。

项目目录结构如图:

QT5代码实现进度条_第1张图片

 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();
}

两种进度条的运行结果

QT5代码实现进度条_第2张图片QT5代码实现进度条_第3张图片

项目源码:https://download.csdn.net/download/sehanlingfeng/11169961 

你可能感兴趣的:(QT)