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("复制结束!");
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);//开启一个没有终点的定时器 //执行耗时操作。。。 //耗时操作完成后,关闭进度对话框 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);//隐藏对话框 }
12345678910111213141516171819202122232425262728293031321234567891011121314151617181920212223242526272829303132
QT进度对话框(QProgressDialog)运行效果图: