利用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