서론
타이머 UI이다.
시 분 초를 설정할 수 있으며 START, STOP, RESET 버튼을 만들었다.
시간이 종료되면 QMessageBox가 출력되는 프로그램을 만들어 보자.
코드
timer.h
#ifndef TIMER_H
#define TIMER_H
#include <QDialog>
#include <QTimer>
namespace Ui {
class Timer;
}
class Timer : public QDialog
{
Q_OBJECT
public:
explicit Timer(QWidget *parent = nullptr);
~Timer();
private:
Ui::Timer *ui;
QTimer *timer;
int totalSeconds = 0;
private slots:
void btn_start();
void btn_stop();
void btn_reset();
void updateTimer();
};
#endif // TIMER_H
timer.cpp
#include "timer.h"
#include "ui_timer.h"
#include <QMessageBox>
Timer::Timer(QWidget *parent) :
QDialog(parent),
ui(new Ui::Timer),
timer(new QTimer(this))
{
ui->setupUi(this);
connect(ui->btn_start, SIGNAL(clicked(bool)), this, SLOT(btn_start()));
connect(ui->btn_stop, SIGNAL(clicked(bool)), this, SLOT(btn_stop()));
connect(ui->btn_reset, SIGNAL(clicked(bool)), this, SLOT(btn_reset()));
connect(timer, SIGNAL(timeout()), this, SLOT(updateTimer()));
ui->btn_stop->setEnabled(false);
}
Timer::~Timer()
{
delete ui;
}
슬롯 함수
btn_start()
void Timer::btn_start()
{
ui->btn_start->setEnabled(false);
ui->btn_stop->setEnabled(true);
int hour = ui->hourBox->value();
int min = ui->MinBox->value();
int second = ui->SecBox->value();
totalSeconds = hour*3600 + min*60 + second;
if(!timer->isActive()){
timer->start(1000);
}
}
- 시작버튼 비활성화 / 정지버튼 활성화
- 시, 분, 초 값을 가져오기
- 전체 시간에 표기
- 1초 단위로 timer 시작
btn_stop()
void Timer::btn_stop()
{
ui->btn_start->setEnabled(true);
ui->btn_stop->setEnabled(false);
if(timer->isActive()){
timer->stop();
}
}
- 시작 버튼 활성화 / 정지 버튼 비활성화
- 타이머가 시작된 상태면 정지
btn_reset()
void Timer::btn_reset()
{
ui->hourBox->setValue(0);
ui->MinBox->setValue(0);
ui->SecBox->setValue(0);
ui->btn_start->setEnabled(true);
ui->btn_stop->setEnabled(false);
totalSeconds=0;
}
- 모든 상태 초기화
updateTimer()
void Timer::updateTimer()
{
if(totalSeconds > 0){
totalSeconds--;
int hours = totalSeconds / 3600;
int minutes = (totalSeconds % 3600) / 60;
int seconds = totalSeconds % 60;
ui->hourBox->setValue(hours);
ui->MinBox->setValue(minutes);
ui->SecBox->setValue(seconds);
} else {
timer->stop();
QMessageBox::information(this, "Timer", "Time's up!");
}
}
- 전체 시간이 남아있을 때 1초마다 1씩 감소
- 전체 시간을 기준으로 시, 분, 초 계산 후 spinbox에 표시
- 시간이 0 이하면 메세지 출력
결과
'🌠Development > QT' 카테고리의 다른 글
QT project - 메모장 구현하기 (0) | 2024.07.19 |
---|---|
QT - QFileDialog 사용해보기 (0) | 2024.07.19 |
QT project - 스톱워치 구현하기 (0) | 2024.07.17 |
QT project - 계산기 구현하기 (2) (0) | 2024.07.17 |
QT project - 계산기 구현하기 (1) (0) | 2024.07.17 |