使用QProgressDialog来展示当前任务执行进度
QProgressDialog 默认会在进度达到设定的最大值时自动关闭。
 setAutoReset()设置为false或setAutoClose()设置为false时对话框无法自动关闭。
功能设计
- 任务未完成时,不允许其他操作,对话框设置为模态阻塞其他界面
 - 设置进度条range为0-100,在任务执行过程中通过setValue改变进度条的当前值
 - 隐藏cancel按钮
 - 设置进度对话框不在任务栏显示
 - 屏蔽键盘esc键会退出对话框的功能
 - 通过setLabelText设置不同阶段的显示文本
 
实现代码
class CProgressDialog : public QProgressDialog
{
public:CProgressDialog(QDialog *parent = nullptr):QProgressDialog(parent){setWindowFlag(Qt::Tool); // 设置此属性使对话框不在任务栏显示setRange(0, 100); // 设置进度范围setCancelButton(nullptr);  // 隐藏取消按钮
//        setAttribute(Qt::WA_DeleteOnClose);setModal(true);  // 设置对话框为模态}// 重写关闭事件void closeEvent(QCloseEvent *event){// 进度达到最大值时才允许对话框关闭if (value() == 100)event->accept();elseevent->ignore();}// 重写键盘事件void keyPressEvent(QKeyEvent *event){switch(event->key()){// 按下esc时,调用close()来触发关闭事件case Qt::Key_Escape:this->close();break;default:QProgressDialog::keyPressEvent(event);}}
};
 
使用方法
    CProgressDialog *progress = new CProgressDialog;progress->setLabelText(tr("Progress"));progress->show();