当前位置: 首页 > article >正文

QT 中 QProgressDialog 进度条窗口 备查

基础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;
// 当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 -> 模态, 阻塞应用程序中的所有窗口

小案例

效果

在这里插入图片描述

思路
    //创建出进度条对话框窗口对象
    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));
            }
    });
//仅作为显示出进度条的参考

详细教程可转

爱编程的大丙


http://www.kler.cn/a/154558.html

相关文章:

  • 【力扣】49.字母异位词分组
  • Visual Studio使用GitHub Copilot提高.NET开发工作效率
  • SpringBoot源码解析(八):Bean工厂接口体系
  • Vuex中的getter和mutation有什么区别
  • Java创建项目准备工作
  • 高级同步工具解析
  • mazing是什么软件?为什么选择iMazing
  • 【Redis】Redis的内部设计与实现
  • vue中中的动画组件使用及如何在vue中使用animate.css
  • go学习之goroutine和channel
  • 微信小程序获取定位显示在百度地图上位置出现偏差
  • vcomp140.dll是什么意思?vcomp140.dll缺失怎么修复的五个方法
  • WT2003H MP3语音芯片方案:强大、灵活且易于集成的音频解决方案
  • 给定一组经纬度如何判断某点是否在这组经纬度的范围之内(电子围栏实现代码)
  • 关于Maxscript你了解多少?
  • ChatGpt回答人工智能发展利大于弊的辩证论述
  • 同步加载、异步加载、延迟加载、预加载的区别
  • Java数据结构之《希尔排序》题目
  • 代码随想录算法训练营第39天| 62.不同路径 63. 不同路径 II
  • 吉他初学者学习网站搭建系列(4)——如何查询和弦图
  • NacosSync 用户手册
  • 苍穹外卖——删除购物车信息
  • Java流Stream使用详解(下)
  • 【JavaSE】API(学习笔记)
  • 【Unity】Blender场景导入
  • Azure Machine Learning - 在 Azure AI 搜索中创建全文查询