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> | ... | ... |