Qt倒计时

利用Qt中的led_number组件制作一个拥有分钟,秒钟的倒计时器

操作:点击定时按钮,出现对话框,设置时间后,点击开始按钮,开始计时

放置组件

ui界面

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QInputDialog>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
        // 创建 QTimer(计时器)
        timer1 = new QTimer(this);
    //倒计时器
    // 设置初始值
    ui->lcdNumber->display(0);
    ui->lcdNumber_2->display(0);
    // 将计时器的timeout信号与槽函数startCountdown连接
    connect(timer1, &QTimer::timeout, this, &MainWindow::startCountdown1);
    // 将点击按钮信号与槽函数startTimer连接

    //点击定时
    connect(ui->toolButton_2,&QToolButton::clicked,[=](){
        bool bOk = false;
        QString stime = QInputDialog::getText(this,
                                              "定时设置",
                                              "输入分钟:秒钟:",
                                              QLineEdit::Normal,
                                              "2:5",
                                              &bOk
                                              );
        //切割时间
        QString min;
        QString sec;
        min=stime.split(":").at(0);
        sec=stime.split(":").at(1);

        ui->lcdNumber->display(sec);
        ui->lcdNumber_2->display(min);

    });

    connect(ui->toolButton, &QToolButton::clicked, this, &MainWindow::startTimer);

        //接收到信号,秒钟打开计时器1,分钟数值减一
    connect(this,&MainWindow::timersignal,[=](){
        value2 = ui->lcdNumber_2->intValue();
        value2--;

        if(value2==-1)
        {
            timer1->stop();
            emit totalTimeout();
        }
        else
        {
            ui->lcdNumber_2->display(value2);
            timer1->start();
            ui->lcdNumber->display(59);
        }
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::startTimer()
{
    // 启动定时器, 参数为触发timeout的周期(ms)
    timer1->start(1000);
}
//秒变换
void MainWindow::startCountdown1()
{
    // 获取当前 LCDNumber 数值
    value1 = ui->lcdNumber->intValue();
    value2 = ui->lcdNumber_2->intValue();

    if (value1 <= 0){
        // 数字减到0, 停止定时器.

        timer1->stop();
        emit timersignal();
        return;
    }
    ui->lcdNumber->display(value1 - 1);


}
//分变换
void MainWindow::startCountdown2()
{
    // 获取当前 LCDNumber 数值
    value1 = ui->lcdNumber->intValue();
    value2 = ui->lcdNumber_2->intValue();

    if (value1 <= 0){
        // 数字减到0, 停止定时器.
        ui->lcdNumber->display(59);
        timer1->stop();
        return;
    }
    ui->lcdNumber->display(value1 - 1);


}

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QTimer>

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


signals:
    void totalTimeout();
    void timersignal();

private slots:

    void startCountdown1(); // 开始倒计时
    void startCountdown2(); // 开始倒计时
    void startTimer(); // 启动计时器

private:
    Ui::MainWindow *ui;
    QTimer *timer1=NULL;
    int value2;//min
    int value1;//sec

};
#endif // MAINWINDOW_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值