題記:在GUI程序中,如果需要處理的某一個操作需要的時間較長時,主界面會出現假死,但實際上操作還是在進行,為了處理這種現象,讓用戶感覺操作一直在進行,可以用到進度條,QT提供了封裝的QProcessDialog類實現該功能,該類繼承自QDialog類,顯示操作的進度。
官方文檔:http://qt-project.org/doc/qt-4.8/qprogressdialog.html
主要的問題:進度值的獲取
用法:幫助文檔里的寫的已經很清楚了,有相關接口的用法,還提供了一些實例。
1. 以模態對話框的形式顯示
1 QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this); 2 3 for (int i = 0; i < numFiles; i++) 4 { 5 progress.setValue(i); 6 7 if (progress.wasCanceled()) 8 break; 9 //... copy one file 10 } 11 progress.setValue(numFiles);
這是文檔中的例子,首先定義一個對象,然后進行對話框的一些初始化,調用方法對進度對話框進行一些設置,這里除了可以調用QProcessDialog類的方法,也可以調用QDialog類的方法,比如:
progress.setWindowTitle("處理進度");
progress.setWindowIcon(QIcon("XX.png"));
不一定要按照這個代碼段的方式進行,進度條最主要的就是setvalue(int)這個方法,在哪里加入這句話設置進度值根據實際情況而定。
構造函數:QProgressDialog ( const QString & labelText, //對話框中的正文
const QString & cancelButtonText, //取消按鈕文字
int minimum, //最小值
int maximum, //最大值
QWidget * parent = 0, //父窗口,可以不填該參數
Qt::WindowFlags f = 0 ) //可以不填
2. 以非模態形式顯示
待學習。。。
后記:利用QProcessDialog類可以解決處理耗時操作給人帶來的軟件死掉的假象。當然,這是最簡單的解決方法,多線程也可以解決這種問題。