基础API
QProgressDialog::QProgressDialog(
QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog::QProgressDialog(
const QString &labelText,
const QString &cancelButtonText,
int minimum, int maximum,
QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::WindowFlags());
参数:
- labelText: 对话框中显示的提示信息
- cancelButtonText: 取消按钮上显示的文本信息
- minimum: 进度条最小值
- maximum: 进度条最大值
- parent: 当前窗口的父对象
- f: 当前进度窗口的flag属性, 使用默认属性即可, 无需设置
*/
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);
int QProgressDialog::minimum() const;
void QProgressDialog::setMinimum(int minimum);
int QProgressDialog::maximum() const;
void QProgressDialog::setMaximum(int maximum);
[slot] void QProgressDialog::setRange(int minimum, int maximum);
int QProgressDialog::value() const;
void QProgressDialog::setValue(int progress);
bool QProgressDialog::autoReset() const;
void QProgressDialog::setAutoReset(bool reset);
bool QProgressDialog::autoClose() const;
void QProgressDialog::setAutoClose(bool close);
bool wasCanceled() const;
[slot] void QProgressDialog::cancel();
[slot] void QProgressDialog::reset();
[signal] void QProgressDialog::canceled();
void QWidget::setWindowModality(Qt::WindowModality windowModality);
参数:
Qt::NonModal -> 非模态
Qt::WindowModal -> 模态, 阻塞父窗口
Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
小案例
效果

思路
QProgressDialog *progress = new QProgressDialog("正在导出...", "打开Excel导出目录", 0, 100, this);
progress->setWindowTitle("请稍后");
progress->setAutoClose(false);
progress->setAutoReset(false);
progress->setWindowModality(Qt::WindowModal);
progress->show();
static int value = 0;
QTimer *time = new QTimer(this);
connect(time, &QTimer::timeout, this, [=](){
progress->setValue(value++);
if(value > progress->maximum())
{
time->stop();
value = 0;
progress->setLabelText("Excel已导出成功。");
}
});
time->start(1);
connect(progress, &QProgressDialog::canceled, this, [=](){
qDebug()<<progress->wasCanceled()<<11;
QString filePath = QFileDialog::getOpenFileName(this,
"导出excel目录",
"C:\\Users\\18584\\Desktop\\qtcode",
"excel(*.xls)");
if(filePath.isEmpty()){
return;
}else
{
QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));
}
});
详细教程可转
爱编程的大丙