题记:在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类可以解决处理耗时操作给人带来的软件死掉的假象。当然,这是最简单的解决方法,多线程也可以解决这种问题。