QTimer 사용해보기
QTimer 클래스는 지정한 시간을 기준으로 반복해 호출할 수 있다.
QTimer 클래스는 stop() 멤버 함수를 이용해 타이머를 정지할 수 있다. 만약 타이머를 반복해서 실행하지 않고 단 한번만 호출되도록 하기 위해 singleShot() 멤버 함수를 사용하면 된다.
QTimer::singleShot(200, this, SLOT(updateCaption()));
singleShot() 멤버 함수의 첫 번째 인자는 경과 되는 시간이며 단위는 밀리 세컨드 이다.
그리고 세번째 인자는 첫 번째 인자의 시간이 경과된 후 호출될 Slot 함수를 지정하면 된다.
현재 시간 코드
헤더파일
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void currentClock();
private:
Ui::Widget *ui;
QTimer *currentTimer;
};
#endif // WIDGET_H
cpp 파일
#include "widget.h"
#include "ui_widget.h"
#include "calculator.h"
#include <QDateTime>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
currentTimer = new QTimer(this);
connect(currentTimer, SIGNAL(timeout()), this, SLOT(currentClock()));
currentTimer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::currentClock(){
QTime time = QTime::currentTime();
QString time_text = time.toString("hh : mm : ss");
ui->label_current_time->setText(time_text);
}
slot 함수 구현 부분 (currentClock())
QTime 객체 생성 후 QTime의 멤버 함수인 currentTime을 불러와 현재 시간을 불러 온다.
QString에 "hh : mm : ss" 값으로 파싱한 후
라벨에 넣는다.
특정 시간까지 남은 시간 코드
헤더파일
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void currentClock();
void leaveWorkClock();
void btn_calculator();
private:
Ui::Widget *ui;
QTimer *leaveWorkTimer;
};
#endif // WIDGET_H
cpp 파일
#include "widget.h"
#include "ui_widget.h"
#include "calculator.h"
#include <QDateTime>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
leaveWorkTimer = new QTimer(this);
connect(leaveWorkTimer, SIGNAL(timeout()), this, SLOT(leaveWorkClock()));
leaveWorkTimer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::leaveWorkClock(){
QTime time = QTime::currentTime();
QTime targetTime(18,0,0);
int secondsToTarget = time.secsTo(targetTime);
if(secondsToTarget < 0){
secondsToTarget += 24 * 60 * 60;
}
int hours = secondsToTarget / 3600;
int minutes = (secondsToTarget % 3600) / 60;
int seconds = secondsToTarget % 60;
QString time_text = QString("%1 : %2 : %3")
.arg(hours)
.arg(minutes)
.arg(seconds);
ui->label->setText(time_text);
ui->label->setStyleSheet("color: red");
}
slot 함수 구현 부분 (leaveWorkClock())
QTime 객체를 생성 후 QTime의 멤버 함수인 currentTime을 사용해 현재 시간을 가져온다.
QTime 객체를 생성 후 18시 값을 targetTime 객체에 저장한다.
targetTime을 초단위로 바꾼 값을 secondsToTarget에 넣는다.
예외 처리부분에서는
퇴근 시간이 넘어가게 되면 다음날의 18시를 계산한다.
시간은 현재 시간의 3600초를 나눈 몫
분은 3600초를 나눈 나머지 값에 60을 나눈 몫
초는 60초를 나눈 나머지 값을 가져간다.
Qstring에 파싱 후 라벨에 넣는다.
결과
'🌠Development > QT' 카테고리의 다른 글
QT project - 계산기 구현하기 (1) (0) | 2024.07.17 |
---|---|
QT project - 새 레이아웃 보이기 (0) | 2024.07.16 |
QT project - 응용 프로그램 만들어보기 (0) | 2024.07.16 |
QT - TcpSocket 통신 Client (0) | 2024.07.15 |
QT - TcpSocket 통신 Server (0) | 2024.07.15 |