基础API
cpp
复制代码
//两个构造函数
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;
// 当value() = maximum()时,进程对话框是否调用reset(),此属性默认为true。
void QProgressDialog::setAutoReset(bool reset);
bool QProgressDialog::autoClose() const;
// 当value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true。
void QProgressDialog::setAutoClose(bool close);
// 判断用户是否按下了取消键, 按下了返回true, 否则返回false
bool wasCanceled() const;
// 重置进度对话框。wascancelled()变为true,直到进程对话框被重置。进度对话框被隐藏。
[slot] void QProgressDialog::cancel();
// 重置进度对话框。如果autoClose()为真,进程对话框将隐藏。
[slot] void QProgressDialog::reset();
// 当单击cancel按钮时,将发出此信号。默认情况下,它连接到cancel()槽。
[signal] void QProgressDialog::canceled();
// 设置窗口的显示状态(模态, 非模态)
void QWidget::setWindowModality(Qt::WindowModality windowModality);
参数:
Qt::NonModal -> 非模态
Qt::WindowModal -> 模态, 阻塞父窗口
Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
小案例
效果
思路
cpp
复制代码
//创建出进度条对话框窗口对象
QProgressDialog *progress = new QProgressDialog("正在导出...", "打开Excel导出目录", 0, 100, this);
//初始化显示进度条窗口标题 (从QWidgeet所继承)
progress->setWindowTitle("请稍后");
// 当value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true。(即进度条到达%100后进度窗口是否会隐藏)
progress->setAutoClose(false);
// 当value() = maximum()时,进程对话框是否调用reset(),此属性默认为true。(即进度条到达%100后是否会清零)
progress->setAutoReset(false);
//设置对话框模态显示
progress->setWindowModality(Qt::WindowModal);
//显示对话框
progress->show();
//更新进度条
static int value = 0; //保存进度值
//使用定时器改变 进度条 value
QTimer *time = new QTimer(this);
connect(time, &QTimer::timeout, this, [=](){
//设置进度值
progress->setValue(value++);
// qDebug()<<progress->value();
//当 value 值达到最大值 100 后,停止定时器
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()){
// QMessageBox::warning(this, "提示", "文件路径错误。");
return;
}else
{
//打开路径对应的文件
QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));
}
});
//仅作为显示出进度条的参考
详细教程可转
爱编程的大丙