본문 바로가기
SWE/Qt

Qt예제] QLCDNumber 이용해 디지털 시계 만들기 *

by S나라라2 2019. 8. 21.
반응형

<QLCDNumber 위젯을 이용해 디지털 시계 만들기>

 

QLCDNumber 위젯을 상속받아, QTimer 위젯의 경과 시간에 따라 시간을 업데이트하는 예제

 

 

예제결과1
예제결과2

예제 결과 1과 2를 보면 가운데 : 가 30초 간격으로 깜빡이고 있다.

 

//digitalclock.h

<code>#include <QLCDNumber> 
class DigitalClock : public QLCDNumber // QLCDNumber 상속받고 있음
{
	Q_OBJECT

	public : 
		DigitalClock(QWidget *parent = 0); // 질문) 아까 꺼에는 parent 표시 안해줬는데 무슨 차이?

	private slots:
		void showTime();
};

QLCDNumber를 상속받은 클래스 DigitalClock을 생성한다.

 

 

//digitalclock.cpp

<code>#include <QtGui>

#include "digitalclock.h"

DigitalClock::DigitalClock(QWidget *parent) : QLCDNumber(parent)
{
	setSegmentStyle(Filled);

	QTimer *timer = new QTimer(this); 
	// 위젯 정의
	
	connect(timer, SIGNAL(timeout()), this, SLOT(showTime())); 
	// 시그널 슬롯 연결
	// 일정시간이 지나면 timeout 시그널이 발생해
	// showTime() 슬롯 함수에서 처리된다.
	
	timer->start(1000); 
	// 1초마다 시간 업데이트

	showTime();
	// 최초 생성 1초 timeout이 지나기 전에도
	// 현재 시간을 표시하기 위해

	setWindowTitle(tr("Digital Clock"));
	resize(150,60);
}

void DigitalClock::showTime()
{
	QTime time = QTime::currentTime(); 
	// 현재시간은 currentTime 함수를 사용하여 time변수에 저장
	
	
	QString text = time.toString("hh:mm"); 
	// time변수에 저장된 시간을 hh:mm 형식으로 QString형으로 변환
	
	
	if((time.second() %2)== 0 )
		text[2] = ' ';
	// 30초 간격으로
	// hh:mm의 ':'을 ' '로 표시 
	// ':'->' ' 
	// 깜빡이는 느낌 줄 수 있음



	display(text); 
	// display함수를 이용해 QLCDNumber 위젯에 입력하면
	// 해당 시간이 표시된다.
}

 

//main.cpp

<code>#include <QApplication>

#include "digitalclock.h"

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	DigitalClock clock;

	clock.show();
	return app.exec();
}

 

 

Qt 위젯 클래스의 계층구조, 상속부분 잘 모르겠다 ㅠㅠ

반응형