考虑程序的友好性,当程序在执行一项耗时操作时,界面应告诉用户“程序还在运行中”,那么,QT中进度对话框(QProgressDialog)可以满足要求。

    (1) 如果所耗总时间已知,则不需要借助定时器。

    1. QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);<br /> dialog.setWindowTitle(tr("进度对话框"));<br /> dialog.setWindowModality(Qt::WindowModal);<br /> dialog.show();<br /> for(int i = 0; i < 50000; i++)//已知最大值不超过50000<br /> {<br /> dialog.setValue(i);<br /> QCoreApplication::processEvents();<br /> if(dialog.wasCanceled())<br /> break;<br /> }<br /> dialog.setValue(50000);<br /> qDebug()<<tr("复制结束!");

    (2) 如果所耗总时间无法估计,则需要借助定时器, 做一个“没有终点”的进度对话框。
    详细源代码请参考,不需要积分喔:
    http://download.csdn.net/detail/learn_sunzhuli/8757715

    1. progDlg = new QProgressDialog();<br /> progDlg->setWindowTitle("Please wait..."); <br /> progDlg->setFixedWidth(300);<br /> progDlg->setRange(0, 100);<br /> progDlg->show();<br /> timer = new QTimer();<br /> currentValue = 0;<br /> progDlg->setValue(currentValue);<br /> connect(timer, SIGNAL(timeout()), this, SLOT(updateProgressDialog()));<br /> 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);//隐藏对话框
    }

    QT进度对话框(QProgressDialog)运行效果图:

    QT中进度对话框(QProgressDialog) - 图1