進度對話框(QProgressDialog)

QProgressDialog顯示目前的工作進度,例如程式安裝、檔案複製、下載等。範例我們創建一個QPushButton,點擊此按鍵後會開起一個進度對話框,我們給QProgressDialog設定一個最大值,QProgressDialog的值從0開始增加,在這之中不斷顯示目前的值佔最大值的比例,我們可在中途關閉對話框,或到最大值的時候對話框自動關閉。


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QApplication>
#include <QWidget>
#include <QProgressDialog>
#include <QPushButton>
#include <QHBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
private slots:
    void openDlg();
private:
    QPushButton *dlgBtn;
    QHBoxLayout *layout;
};

#endif 

widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent) : 
    QWidget(parent)
{
    setWindowTitle(tr("進度對話框"));
    layout = new QHBoxLayout(this);
    dlgBtn = new QPushButton(tr("開啟進度對話框"));
    layout->addWidget(dlgBtn);

    connect(dlgBtn,SIGNAL(clicked()),this,SLOT(openDlg()));
}

void Widget::openDlg() {
    QProgressDialog dlg(tr("複製進度"),tr("取消"),0,50000,this);
    dlg.setWindowTitle(tr("進度對話框"));
    dlg.setWindowModality(Qt::WindowModal); //設定成模態對話框
    dlg.show();
    for(int i=0; i<50000; i++){
        dlg.setValue(i+1);
        QCoreApplication::processEvents(); //避免介面凍結
        if(dlg.wasCanceled()){
            break;
        }
    }
}

main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

QProgressDialog