QT中進度對話框(QProgressDialog)

考慮程序的友好性,當程序在執行一項耗時操作時,界面應告訴用戶“程序還在運行中”,那麼,QT中進度對話框(QProgressDialog)可以滿足要求。

(1) 如果所耗總時間已知,則不需要藉助定時器。

    QProgressDialog dialog(tr("文件複製進度"), tr("取消"), 0, 50000, this);
    dialog.setWindowTitle(tr("進度對話框"));
    dialog.setWindowModality(Qt::WindowModal);
    dialog.show();
    for(int i = 0; i < 50000; i++)//已知最大值不超過50000
    {
        dialog.setValue(i);
        QCoreApplication::processEvents();
        if(dialog.wasCanceled())
            break;
    }
    dialog.setValue(50000);
    qDebug()<<tr("複製結束!");

(2) 如果所耗總時間無法估計,則需要藉助定時器, 做一個“沒有終點”的進度對話框。
詳細源代碼請參考,不需要積分喔:
http://download.csdn.net/detail/learn_sunzhuli/8757715

    progDlg = new QProgressDialog();
    progDlg->setWindowTitle("Please wait..."); 
    progDlg->setFixedWidth(300);
    progDlg->setRange(0, 100);
    progDlg->show();
    timer = new QTimer();
    currentValue = 0;
    progDlg->setValue(currentValue);
    connect(timer, SIGNAL(timeout()), this, SLOT(updateProgressDialog()));
    timer->start(100);//開啓一個沒有終點的定時器

//執行耗時操作。。。

//耗時操作完成後,關閉進度對話框
  timer->stop();//停止定時器
  if(currentValue != 100)
      currentValue = 100;
  progDlg->setValue(currentValue);//進度達到最大值
  delete progDlg;//關閉進度對話框

//藉助定時器,不斷更新進度條,直到耗時操縱結束
void updateProgressDialog()
{
    currentValue++;  
    if( currentValue == 100 )  
        currentValue = 0;  
    progDlg ->setValue(currentValue);
    QCoreApplication::processEvents();//避免界面凍結
    if(progDlg->wasCanceled())
        progDlg->setHidden(true);//隱藏對話框
}

QT進度對話框(QProgressDialog)運行效果圖:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章