QT学习:进度条
一般來說,在處理長時間任務(wù)時需要提供進度條用于顯示時間,告訴用戶當(dāng)前任務(wù)的進展情況。進度條對話框的使用方法有模態(tài)方式與非模態(tài)方式兩種。相比之下模態(tài)方式的使用比較簡單方便,但必須使用AplaicotoprocessEventSt使事件循環(huán)保持正常進行狀態(tài),以確保應(yīng)用不會被阻塞。非模態(tài)方式是通過QTime實現(xiàn)定時設(shè)置進度條的值。QTime類的用法我們在后面將會講解。
Qt提供了兩種顯示進度條的方式
(1)QProgressBar :提供了一種橫向或縱向顯示進度的控件表示方式,用來描述任務(wù)的完成情況。
(2)QProgressDialog :提供了一種針對慢速過程的進度對話框表示方式,用于描述任務(wù)完成的進度情況。標(biāo)準(zhǔn)的進度條對話框包括一個進度顯示條、一個“取消” 按鈕及一個標(biāo)簽。
下面讓我們用代碼來詳細展示:
頭文件代碼:
cpp文件代碼:
#include "progressdlg.h" #include <QProgressDialog> #include <QFont> ProgressDlg::ProgressDlg(QWidget *parent): QDialog(parent) {QFont font("ZYSong18030",12);setFont(font);setWindowTitle(tr("Progress"));FileNum =new QLabel;FileNum->setText(tr("文件數(shù)目:"));FileNumLineEdit =new QLineEdit;FileNumLineEdit->setText(tr("100000"));ProgressType =new QLabel;ProgressType->setText(tr("顯示類型:"));comboBox =new QComboBox;comboBox->addItem(tr("progressBar"));comboBox->addItem(tr("progressDialog"));progressBar =new QProgressBar;starBtn =new QPushButton();starBtn->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(starBtn,3,1);mainLayout->setMargin(15);mainLayout->setSpacing(10);connect(starBtn,SIGNAL(clicked()),this,SLOT(startProgress())); }void ProgressDlg::startProgress() {bool ok;int num =FileNumLineEdit->text().toInt(&ok);//獲取當(dāng)前需要復(fù)制的文件數(shù)目if(comboBox->currentIndex()==0) //采用進度條的方式顯示進度{progressBar->setRange(0,num); //設(shè)置進度條的范圍從0到需要復(fù)制的文件數(shù)目for(int i=1;i<num+1;i++){progressBar->setValue(i); //模擬每一個文件的復(fù)制過程}}else if(comboBox->currentIndex()==1) //采用進度對話框顯示進度{//創(chuàng)建一個進度對話框QProgressDialog *progressDialog=new QProgressDialog(this);QFont font("ZYSong18030",12);progressDialog->setFont(font);progressDialog->setWindowModality(Qt::WindowModal); //設(shè)置進度對話框采用模態(tài)方式進行顯示,即在顯示進度的同時,其它窗口將不響應(yīng)輸入信號progressDialog->setMinimumDuration(5); //設(shè)置進度對話框出現(xiàn)需等待的時間,此出設(shè)定為5s,默認為4sprogressDialog->setWindowTitle(tr("Please Wait")); //設(shè)置進度對話框的窗體標(biāo)題progressDialog->setLabelText(tr("Copying...")); //設(shè)置進度對話框的顯示文字信息progressDialog->setCancelButtonText(tr("Cancel")); //設(shè)置進度對話框”取消“按鈕的文字progressDialog->setRange(0,num); //設(shè)置進度對話框的步進范圍for(int i=1;i<num+1;i++){progressDialog->setValue(i); //模擬每個文件的復(fù)制過程,進度條總的步進值為需要復(fù)制的文件數(shù)目。當(dāng)復(fù)制完一個文件后,步進值加1if(progressDialog->wasCanceled()) //檢測”取消“按鈕是否被觸發(fā),若觸發(fā)則退出循壞并關(guān)閉進度對話框。return;}} }ProgressDlg::~ProgressDlg() {}
總結(jié)