Commit d2d4687e0721510932366fcc9f2685c56a7cc0c8

Authored by 김태훈
1 parent 4cdc059ed4
Exists in master and in 2 other branches fhd, fhd-demo

아날로그 시계 추가

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
... ... @@ -0,0 +1,11 @@
  1 +#include "mainwindow.h"
  2 +#include <QApplication>
  3 +
  4 +int main(int argc, char *argv[])
  5 +{
  6 + QApplication a(argc, argv);
  7 + MainWindow w;
  8 + w.show();
  9 +
  10 + return a.exec();
  11 +}
... ...
app/gui/samples/analogclock/mainwindow.cpp
... ... @@ -0,0 +1,14 @@
  1 +#include "mainwindow.h"
  2 +#include "ui_mainwindow.h"
  3 +
  4 +MainWindow::MainWindow(QWidget *parent) :
  5 + QMainWindow(parent),
  6 + ui(new Ui::MainWindow)
  7 +{
  8 + ui->setupUi(this);
  9 +}
  10 +
  11 +MainWindow::~MainWindow()
  12 +{
  13 + delete ui;
  14 +}
... ...
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>
... ...