QT 中 QProgressDialog 进度条窗口 备查

基础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));
            }
    });
//仅作为显示出进度条的参考

详细教程可转

爱编程的大丙

相关推荐
qq_4017004144 分钟前
QT段错误一般是什么原因造成的,如何快速排查
qt
平常心的技术小牛1 小时前
Qt-快速上手-QLabel
开发语言·qt
不会代码的小猴1 小时前
2. 了解Qt
开发语言·c++·笔记·qt·算法
丰锋ff10 小时前
3.1 Qt事件之事件处理器
开发语言·qt
反转180度12 小时前
Qt 6 + C++17 实现 SFTP 批量部署:工业设备运维工具实战解析
运维·c++·qt
我不是疯子是傻子14 小时前
Qt CAN通信周期发送抖动?实测定时器精度校准与时间戳补偿方案
开发语言·数据库·qt
2023自学中15 小时前
Qt 简易聊天室(第二篇),单线程 改为 多线程,方便后续增加文件传输功能
c++·qt
丰锋ff20 小时前
1.7在Qt窗口中添加右键菜单
开发语言·qt
richard_yuu1 天前
JSON vs XML vs 二进制:3种序列化终极选型
xml·c++·qt·学习·json
秋田君1 天前
QT_实战TCP 聊天程序说明文档以及实现
数据库·qt·tcp/ip