#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()
{
}
运行效果图: