반응형
<QLCDNumber 위젯을 이용해 디지털 시계 만들기>
QLCDNumber 위젯을 상속받아, QTimer 위젯의 경과 시간에 따라 시간을 업데이트하는 예제
예제 결과 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 위젯 클래스의 계층구조, 상속부분 잘 모르겠다 ㅠㅠ
반응형