Commit d2d4687e0721510932366fcc9f2685c56a7cc0c8
1 parent
4cdc059ed4
Exists in
master
and in
2 other branches
아날로그 시계 추가
Showing
8 changed files
with
248 additions
and
0 deletions
Show diff stats
app/gui/samples/analogclock/.gitignore
... | ... | @@ -0,0 +1 @@ |
1 | +*.pro.user | ... | ... |
app/gui/samples/analogclock/analogclock.pro
... | ... | @@ -0,0 +1,22 @@ |
1 | +#------------------------------------------------- | |
2 | +# | |
3 | +# Project created by QtCreator 2017-01-13T15:08:27 | |
4 | +# | |
5 | +#------------------------------------------------- | |
6 | + | |
7 | +QT += core gui | |
8 | + | |
9 | +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets | |
10 | + | |
11 | +TARGET = test_clock | |
12 | +TEMPLATE = app | |
13 | + | |
14 | + | |
15 | +SOURCES += main.cpp\ | |
16 | + mainwindow.cpp \ | |
17 | + clock.cpp | |
18 | + | |
19 | +HEADERS += mainwindow.h \ | |
20 | + clock.h | |
21 | + | |
22 | +FORMS += mainwindow.ui | ... | ... |
app/gui/samples/analogclock/clock.cpp
... | ... | @@ -0,0 +1,120 @@ |
1 | +#include "clock.h" | |
2 | + | |
3 | +#include <QTime> | |
4 | +#include <QPainter> | |
5 | +#include <QtDebug> | |
6 | +#include <QDateTime> | |
7 | +#include <QTimeZone> | |
8 | +#include <QTimer> | |
9 | + | |
10 | +Clock::Clock(QWidget *parent) : QWidget(parent) | |
11 | +{ | |
12 | + QTimer *timer = new QTimer(this); | |
13 | + connect(timer, SIGNAL(timeout()), this, SLOT(update())); | |
14 | + timer->start(33); | |
15 | +} | |
16 | + | |
17 | +void Clock::paintEvent(QPaintEvent */*event*/) | |
18 | +{ | |
19 | + QTime time = QDateTime::currentDateTime().time(); | |
20 | + | |
21 | + QPainter painter(this); | |
22 | + painter.setRenderHint(QPainter::Antialiasing); | |
23 | + painter.translate(width() / 2, height() / 2); | |
24 | + | |
25 | + int side = qMin(width(), height()); | |
26 | + painter.scale(side / 200.0, side / 200.0); | |
27 | + | |
28 | + QPen hourHand(Qt::white, 6, Qt::SolidLine, Qt::RoundCap); | |
29 | + QPen hourArm(Qt::white, 2); | |
30 | + QPen hourLine(Qt::white, 3); | |
31 | + | |
32 | + QPen minHand(hourHand); | |
33 | + QPen minArm(hourArm); | |
34 | + QPen minLine(Qt::white, 1); | |
35 | + | |
36 | + QPen secHand(Qt::red, 2); | |
37 | + | |
38 | + QPen capPen(Qt::white, 3); | |
39 | + QBrush capBrush(Qt::black, Qt::SolidPattern); | |
40 | + | |
41 | + QFont numberFont; | |
42 | + numberFont.setPixelSize(20); | |
43 | + | |
44 | + QFontMetrics numberFontMetrics(numberFont); | |
45 | + | |
46 | + QPen numberPen(Qt::white); | |
47 | + numberPen.setWidth(2); | |
48 | + | |
49 | + // Lines | |
50 | + painter.setPen(minLine); | |
51 | + for (int j = 0; j < 60; ++j) { | |
52 | + if ((j % 5) != 0) | |
53 | + painter.drawLine(92, 0, 96, 0); | |
54 | + painter.rotate(6.0); | |
55 | + } | |
56 | + | |
57 | + painter.setPen(hourLine); | |
58 | + for (int i = 0; i < 12; ++i) { | |
59 | +// painter.drawLine(88, 0, 96, 0); | |
60 | + painter.drawLine(92, 0, 96, 0); | |
61 | + painter.rotate(30.0); | |
62 | + } | |
63 | + | |
64 | + // Numbers | |
65 | + painter.setPen(numberPen); | |
66 | + painter.setFont(numberFont); | |
67 | + | |
68 | + QTransform transform; | |
69 | + QPoint targetPoint(0, -75); | |
70 | + QPoint transformedTarget(targetPoint); | |
71 | + | |
72 | + QString strings[] = { "12", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" }; | |
73 | + for (int i = 0; i < 12; i++) { | |
74 | + QString string = strings[i]; | |
75 | + QRect boundingRect = numberFontMetrics.boundingRect(string); | |
76 | + boundingRect.moveCenter(transformedTarget); | |
77 | + painter.drawText(boundingRect, Qt::AlignCenter, string); | |
78 | + | |
79 | + transform.rotate(30.0); | |
80 | + transformedTarget = transform.map(targetPoint); | |
81 | + } | |
82 | + | |
83 | + // Needles | |
84 | + qreal second = time.second() + time.msec() / 1000.0; | |
85 | + if (/* ticking == */ false) | |
86 | + second = time.second(); | |
87 | + | |
88 | + qreal minute = time.minute() + second / 60.0; | |
89 | + qreal hour = time.hour() + minute / 60.0; | |
90 | + | |
91 | + // Sec | |
92 | + painter.save(); | |
93 | + painter.setPen(secHand); | |
94 | + painter.rotate(6.0 * second); | |
95 | + painter.drawLine(0, 15, 0, -80); | |
96 | + painter.restore(); | |
97 | + | |
98 | + // Min | |
99 | + painter.save(); | |
100 | + painter.rotate(6.0 * minute); | |
101 | + painter.setPen(minArm); | |
102 | + painter.drawLine(0, 0, 0, -15); | |
103 | + painter.setPen(minHand); | |
104 | + painter.drawLine(0, -15, 0, -75); | |
105 | + painter.restore(); | |
106 | + | |
107 | + // Hour | |
108 | + painter.save(); | |
109 | + painter.rotate(30.0 * hour); | |
110 | + painter.setPen(hourArm); | |
111 | + painter.drawLine(0, 0, 0, -15); | |
112 | + painter.setPen(hourHand); | |
113 | + painter.drawLine(0, -15, 0, -50); | |
114 | + painter.restore(); | |
115 | + | |
116 | + // Cap | |
117 | + painter.setPen(capPen); | |
118 | + painter.setBrush(capBrush); | |
119 | + painter.drawEllipse(-5, -5, 10, 10); | |
120 | +} | ... | ... |
app/gui/samples/analogclock/clock.h
... | ... | @@ -0,0 +1,20 @@ |
1 | +#ifndef CLOCK_H | |
2 | +#define CLOCK_H | |
3 | + | |
4 | +#include <QWidget> | |
5 | + | |
6 | +class Clock : public QWidget | |
7 | +{ | |
8 | + Q_OBJECT | |
9 | +public: | |
10 | + explicit Clock(QWidget *parent = 0); | |
11 | + | |
12 | +signals: | |
13 | + | |
14 | +public slots: | |
15 | + | |
16 | +protected: | |
17 | + void paintEvent(QPaintEvent *event); | |
18 | +}; | |
19 | + | |
20 | +#endif // CLOCK_H | ... | ... |
app/gui/samples/analogclock/main.cpp
app/gui/samples/analogclock/mainwindow.cpp
app/gui/samples/analogclock/mainwindow.h
... | ... | @@ -0,0 +1,22 @@ |
1 | +#ifndef MAINWINDOW_H | |
2 | +#define MAINWINDOW_H | |
3 | + | |
4 | +#include <QMainWindow> | |
5 | + | |
6 | +namespace Ui { | |
7 | +class MainWindow; | |
8 | +} | |
9 | + | |
10 | +class MainWindow : public QMainWindow | |
11 | +{ | |
12 | + Q_OBJECT | |
13 | + | |
14 | +public: | |
15 | + explicit MainWindow(QWidget *parent = 0); | |
16 | + ~MainWindow(); | |
17 | + | |
18 | +private: | |
19 | + Ui::MainWindow *ui; | |
20 | +}; | |
21 | + | |
22 | +#endif // MAINWINDOW_H | ... | ... |
app/gui/samples/analogclock/mainwindow.ui
... | ... | @@ -0,0 +1,38 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<ui version="4.0"> | |
3 | + <class>MainWindow</class> | |
4 | + <widget class="QMainWindow" name="MainWindow"> | |
5 | + <property name="geometry"> | |
6 | + <rect> | |
7 | + <x>0</x> | |
8 | + <y>0</y> | |
9 | + <width>370</width> | |
10 | + <height>357</height> | |
11 | + </rect> | |
12 | + </property> | |
13 | + <property name="windowTitle"> | |
14 | + <string>MainWindow</string> | |
15 | + </property> | |
16 | + <property name="styleSheet"> | |
17 | + <string notr="true">background-color: black</string> | |
18 | + </property> | |
19 | + <widget class="QWidget" name="centralWidget"> | |
20 | + <layout class="QHBoxLayout" name="horizontalLayout"> | |
21 | + <item> | |
22 | + <widget class="Clock" name="widget" native="true"/> | |
23 | + </item> | |
24 | + </layout> | |
25 | + </widget> | |
26 | + </widget> | |
27 | + <layoutdefault spacing="6" margin="11"/> | |
28 | + <customwidgets> | |
29 | + <customwidget> | |
30 | + <class>Clock</class> | |
31 | + <extends>QWidget</extends> | |
32 | + <header>clock.h</header> | |
33 | + <container>1</container> | |
34 | + </customwidget> | |
35 | + </customwidgets> | |
36 | + <resources/> | |
37 | + <connections/> | |
38 | +</ui> | ... | ... |