QProgressDialog使用方法

#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets/QWidget>
#include <QProgressDialog>
#include <QTimer>
#include <QDebug>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
    
    QPushButton m_testBtn;
    QProgressDialog* m_pDialog;
    QTimer m_timer;
    
protected slots:
    void btnSlot();
    void timeroutSlot();
    void cancelSlot();
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H
#include "Widget.h"



Widget::Widget(QWidget *parent) : QWidget(parent),m_pDialog(NULL)
{
    m_timer.setParent(this);
    m_timer.setInterval(1000);
    
    m_testBtn.setText("按钮");
    m_testBtn.setParent(this);
    connect(&m_testBtn, SIGNAL(clicked()), this, SLOT(btnSlot()));
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(timeroutSlot()));    
}

void Widget::btnSlot()
{
    qDebug() << "void Widget::btnSlot()";
    if(m_pDialog == NULL)
    {
        m_pDialog = new QProgressDialog();
        m_pDialog->setLabelText("正在进行中...");
        m_pDialog->setRange(0, 10);
        m_pDialog->setValue(1);
        m_pDialog->setAutoReset(false);
        
        connect(m_pDialog, SIGNAL(canceled()), this, SLOT(cancelSlot()));
        disconnect(m_pDialog, SIGNAL(canceled()), m_pDialog, SLOT(cancel()));
        
        m_timer.start();
        m_pDialog->exec();  
    }
    
}

void Widget::timeroutSlot()
{
    qDebug() << "void Widget::timeroutSlot()";
    if(NULL != m_pDialog)
    {
        if(m_pDialog->maximum() == m_pDialog->value())
        {
            m_timer.stop();
            m_pDialog->done(1);
            delete m_pDialog;
            m_pDialog = NULL;
            return;
        }
        
        m_pDialog->setValue(m_pDialog->value()+1);
    }
}

void Widget::cancelSlot()
{
    qDebug() << "void Widget::cancelSlot()";
    if(NULL != m_pDialog)
    {
        m_pDialog->done(0);
        delete m_pDialog;
        m_pDialog = NULL;
        m_timer.stop();
    }
}

Widget::~Widget()
{
}

运行效果图:

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值