一、实现功能
1、倒计时结束跳转
2、作为按钮本身支持点击返回
二、控件设计
1、QWidget类的一个Horizontal Layout中添加两个Qlabel类的文本框控件,这两个文本框一个用来显示倒计时的数字,一个用来插入一个返回图标,如下图所示:
三、源代码
1、编写.h文件,这里的CountDown类申明为QPushButton类的子类,故支持点击操作,还声明了一个QTimer类的对象作为私有成员,作为定时器来触发秒数倒计时功能的槽函数
#ifndef COUNTDOWN_H
#define COUNTDOWN_H
#include <QPushButton>
#include <QTimer>
typedef enum _COUNTDOWN_TIMEOUT_
{
COUNTDOWN_NormalDefault = 30, //默认30s
}EnumCountDownTimeOut;
namespace Ui {
class CountDown;
}
class CountDown : public QPushButton
{
Q_OBJECT
public:
explicit CountDown(QWidget *parent);
~CountDown();
void init(int count);
private Q_SLOTS:
void countDownUpdate(void);
void clickReturn(bool click);
Q_SIGNALS:
void sigReturn(bool timeout=true);
private:
Ui::CountDown *ui;
int _countDown;
int _defaultCount;
QTimer *timer;
};
#endif // COUNTDOWN_H
2、编写.cpp文件 ,包含具体倒计时功能的实现,以及触发跳转界面信号的实现,相关信号与槽的连接
#include "CountDown.h"
#include "ui_CountDown.h"
CountDown::CountDown(QWidget *parent) :
QPushButton(parent),
ui(new Ui::CountDown)
{
ui->setupUi(this);
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(countDownUpdate()), Qt::QueuedConnection);
connect(this, SIGNAL(clicked(bool)), this, SLOT(clickReturn(bool)), Qt::QueuedConnection);
}
CountDown::~CountDown()
{
delete ui;
}
void CountDown::init(int count)
{
ui->labelCount->setText(QString::number(count));
_defaultCount = count;
_countDown = count;
timer->start(1000);
}
void CountDown::countDownUpdate(void)
{
_countDown--;
if(_countDown < 0){
_countDown = 0;
timer->stop();
emit sigReturn();
}
ui->labelCount->setText(QString::number(_countDown));
}
void CountDown::clickReturn(bool click)
{
timer->stop();
emit sigReturn(false);
}
四、总结
最终就完成了一个倒计时插件供其他界面进行使用,这里倒计时插件由于继承于QPushButton类,所以其本身是个按钮框,除了支持倒计时跳转同样支持点击按钮的方式来跳转。