使用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();