개인 프로젝트/Accounting Program

#7 날짜/시간 표시하기

Scala0114 2021. 10. 17. 16:28

이번에는 앱에 날짜를 표시하는 기능을 넣어보자.

 

1. QDate

QDate 클래스는 날짜관련 기능들을 제공하는 클래스이다.  위와 같이 QLabel 위젯 클래스도 함께 import 해준다.

 

QDate.currentDate 를 호출하면 현재 날짜(년월일)를 구할 수 있다. toString(<format>) 을 호출하여 원하는 형태로 

문자열화 할 수도 있다. 포맷을 'yyyy년 MM월 dd일 ddd' 로 하여 QLabel을 생성, 상태표시줄에 영구위젯으로 붙여보자.

 

오늘의 날짜가 상태표시줄의 우측 하단에 표시되는 것을 볼 수 있다.  addPermanentWidget은 추가로 호출하면

먼저 추가된 영구위젯의 오른쪽에 다른 영구위젯을 추가로 계속 붙여나갈 수 있다.

 

 

2. QTime

이번엔 시간을 표시할 차례이다. QTime 클래스를 import 해주자.

 

QTime.currentTime을 호출하여 현재시간을 구한 뒤 'hh:mm:ss' 의 포맷으로 QLabel을 만들어 상태표시줄에 붙여주자.

 

이제 상태표시줄에 시간도 표시된다.

 

 

3. QDateTime

 QDateTime 클래스는 날짜와 시간 모두를 다룰 수 있는 클래스이다.  QDate와 QTime 클래스 대신 QDateTime을 import 해준 뒤 currentDateTime 을 호출하여 현재 날짜와 시간을 동시에 구하여 QLabel을 만들고 상태표시줄에 

영구위젯으로 추가해주자.

 

이제 날짜와 시간이 한번에 표시된다.

 

 

4. QTimer

 

그런데 현재 시간표시에는 한가지 문제가있다.  처음 프로그램을 켰을때만 현재시간을 상태표시줄에 띄워주기 때문에

시간이 지나도 프로그램을 켰던 순간의 날짜와 시간만이 표시된다는 것이다.  이를 해결하려면 주기적으로 시간을 다시

체크하여 띄워줄 필요가 있다.

 

QTimer 클래스는 지정된 인터벌마다 timeout 시그널을 발생시켜 일정 시간단위로 발생해야하는 이벤트를

시그널-슬롯 방식으로 처리할 수 있게 해주는 클래스이다.  import 해주자.

 

QLabel 위젯을 상속하는 TimeLabel 위젯을 만들어준다.  초기값이 날짜/시간으로 지정된 평범한 레이블 위젯이지만

timer를 추가하여 timer가 timeout 시그널을 발생시킬 때 마다 timeout 이라는 메소드를 호출하도록 설정되어있다.

timer 는 0.1초에 한번씩 timeout을 발생시키며 timeout 메소드는 레이블에 표시되는 날짜와 시간을 갱신한다.

interval을 1초에 한번씩이 아니라 0.1초에 한번씩으로 설정한것은 1초단위로 할 경우 실제 시간과 초단위의 싱크가

잘 맞지 않았기 때문이다.  초단위의 정확도가 필요한게 아니라면 인터벌을 조금 늘려도 괜찮을 것 같다.

 

이제 시간을 표시하는 TimeLabel의 인스턴스를 생성하여 상태표시줄에 영구위젯으로 추가해준다.

 

이제 상태표시줄에 표시되는 시간이 초단위로 갱신되는 것을 확인할 수 있다.