QT中進度對話框(QProgressDialog)
考慮程序的友好性,當(dāng)程序在執(zhí)行一項耗時操作時,界面應(yīng)告訴用戶“程序還在運行中”,那么,QT中進度對話框(QProgressDialog)可以滿足要求。
(1) 如果所耗總時間已知,則不需要借助定時器。
????QProgressDialog?dialog(tr("文件復(fù)制進度"),?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("復(fù)制結(jié)束!");
12345678910111213141234567891011121314
(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);//開啟一個沒有終點的定時器 //執(zhí)行耗時操作。。。 //耗時操作完成后,關(guān)閉進度對話框 ??timer->stop();//停止定時器 ??if(currentValue?!=?100) ??????currentValue?=?100; ??progDlg->setValue(currentValue);//進度達到最大值 ??delete?progDlg;//關(guān)閉進度對話框 //借助定時器,不斷更新進度條,直到耗時操縱結(jié)束 void?updateProgressDialog() { ????currentValue++;?? ????if(?currentValue?==?100?)?? ????????currentValue?=?0;?? ????progDlg?->setValue(currentValue); ????QCoreApplication::processEvents();//避免界面凍結(jié) ????if(progDlg->wasCanceled()) ????????progDlg->setHidden(true);//隱藏對話框 }
12345678910111213141516171819202122232425262728293031321234567891011121314151617181920212223242526272829303132
QT進度對話框(QProgressDialog)運行效果圖: