QT中的进度条对话框,默认设置状态下的QProgressDialog:
QProgressDialog oQProgressDialog(this);// 最好指定parent窗体,否则模态可能无效
oQProgressDialog.setWindowModality(Qt::ApplicationModal);//对本程序模态,本程序所有窗口都禁止输入
oQProgressDialog.setWindowTitle(QString::fromLocal8Bit("请等待..."));
oQProgressDialog.setLabelText(QString::fromLocal8Bit("正在执行..."));
oQProgressDialog.setRange(0, 5);
oQProgressDialog.setValue(0);
oQProgressDialog.resize(320,180);// 设置对话框的尺寸(不设置会自适应)
oQProgressDialog.show();
在右上角是有一个 “ ? ” 帮助按钮和 “ X ” 关闭按钮,右下方则是一个 “ Cancel ” 按钮。如果需要禁用或者隐藏这三个按钮,则需要多加两句代码:
//隐藏对话框内的Cancel按钮
oQProgressDialog.setCancelButtonText(nullptr);
//禁用右上角所有按钮,但最小化按钮可用
oQProgressDialog.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint);
如果连最小化按钮都想隐藏,可以这样设置:
// 禁用右上角标题栏的关闭按钮,同时隐藏帮助按钮
oQProgressDialog.setWindowFlags(progress.windowFlags() & ~Qt::WindowCloseButtonHint & ~Qt::WindowContextHelpButtonHint);
这样设置后,既不能点击右上角的“X”关闭按钮,也不能点击“Cancel”按钮,还不能操作本程序的任何窗口,使用者啥都不能做,只能乖乖等待完成(睇你死未),从而省去做取消相关的逻辑,和避免误操作,本人最讨厌做取消流程。
其实对话框内的 “ Cancel ” 按钮还有其他方法禁用或者隐藏:
//方法2:创建一个取消按钮,覆盖默认的“Cancel”按钮,然后隐藏按钮
QPushButton okButton(QString::fromLocal8Bit("取消"));//创建一个“取消”按钮
okButton.hide();//隐藏此按钮
okButton.setEnabled(false);//禁用此按钮
oQProgressDialog.setCancelButton(&okButton);//替换进度条对话框内默认的“Cancel”按钮
//方法3:整个进度条对话框禁用
oQProgressDialog.setEnabled(false);