From d2d4687e0721510932366fcc9f2685c56a7cc0c8 Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 13 Jan 2017 17:59:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=84=EB=82=A0=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=8B=9C=EA=B3=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gui/samples/analogclock/.gitignore | 1 + app/gui/samples/analogclock/analogclock.pro | 22 +++++ app/gui/samples/analogclock/clock.cpp | 120 ++++++++++++++++++++++++++++ app/gui/samples/analogclock/clock.h | 20 +++++ app/gui/samples/analogclock/main.cpp | 11 +++ app/gui/samples/analogclock/mainwindow.cpp | 14 ++++ app/gui/samples/analogclock/mainwindow.h | 22 +++++ app/gui/samples/analogclock/mainwindow.ui | 38 +++++++++ 8 files changed, 248 insertions(+) create mode 100644 app/gui/samples/analogclock/.gitignore create mode 100644 app/gui/samples/analogclock/analogclock.pro create mode 100644 app/gui/samples/analogclock/clock.cpp create mode 100644 app/gui/samples/analogclock/clock.h create mode 100644 app/gui/samples/analogclock/main.cpp create mode 100644 app/gui/samples/analogclock/mainwindow.cpp create mode 100644 app/gui/samples/analogclock/mainwindow.h create mode 100644 app/gui/samples/analogclock/mainwindow.ui diff --git a/app/gui/samples/analogclock/.gitignore b/app/gui/samples/analogclock/.gitignore new file mode 100644 index 0000000..75c107b --- /dev/null +++ b/app/gui/samples/analogclock/.gitignore @@ -0,0 +1 @@ +*.pro.user diff --git a/app/gui/samples/analogclock/analogclock.pro b/app/gui/samples/analogclock/analogclock.pro new file mode 100644 index 0000000..46e9342 --- /dev/null +++ b/app/gui/samples/analogclock/analogclock.pro @@ -0,0 +1,22 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-01-13T15:08:27 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = test_clock +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp \ + clock.cpp + +HEADERS += mainwindow.h \ + clock.h + +FORMS += mainwindow.ui diff --git a/app/gui/samples/analogclock/clock.cpp b/app/gui/samples/analogclock/clock.cpp new file mode 100644 index 0000000..8cba492 --- /dev/null +++ b/app/gui/samples/analogclock/clock.cpp @@ -0,0 +1,120 @@ +#include "clock.h" + +#include +#include +#include +#include +#include +#include + +Clock::Clock(QWidget *parent) : QWidget(parent) +{ + QTimer *timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(update())); + timer->start(33); +} + +void Clock::paintEvent(QPaintEvent */*event*/) +{ + QTime time = QDateTime::currentDateTime().time(); + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.translate(width() / 2, height() / 2); + + int side = qMin(width(), height()); + painter.scale(side / 200.0, side / 200.0); + + QPen hourHand(Qt::white, 6, Qt::SolidLine, Qt::RoundCap); + QPen hourArm(Qt::white, 2); + QPen hourLine(Qt::white, 3); + + QPen minHand(hourHand); + QPen minArm(hourArm); + QPen minLine(Qt::white, 1); + + QPen secHand(Qt::red, 2); + + QPen capPen(Qt::white, 3); + QBrush capBrush(Qt::black, Qt::SolidPattern); + + QFont numberFont; + numberFont.setPixelSize(20); + + QFontMetrics numberFontMetrics(numberFont); + + QPen numberPen(Qt::white); + numberPen.setWidth(2); + + // Lines + painter.setPen(minLine); + for (int j = 0; j < 60; ++j) { + if ((j % 5) != 0) + painter.drawLine(92, 0, 96, 0); + painter.rotate(6.0); + } + + painter.setPen(hourLine); + for (int i = 0; i < 12; ++i) { +// painter.drawLine(88, 0, 96, 0); + painter.drawLine(92, 0, 96, 0); + painter.rotate(30.0); + } + + // Numbers + painter.setPen(numberPen); + painter.setFont(numberFont); + + QTransform transform; + QPoint targetPoint(0, -75); + QPoint transformedTarget(targetPoint); + + QString strings[] = { "12", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11" }; + for (int i = 0; i < 12; i++) { + QString string = strings[i]; + QRect boundingRect = numberFontMetrics.boundingRect(string); + boundingRect.moveCenter(transformedTarget); + painter.drawText(boundingRect, Qt::AlignCenter, string); + + transform.rotate(30.0); + transformedTarget = transform.map(targetPoint); + } + + // Needles + qreal second = time.second() + time.msec() / 1000.0; + if (/* ticking == */ false) + second = time.second(); + + qreal minute = time.minute() + second / 60.0; + qreal hour = time.hour() + minute / 60.0; + + // Sec + painter.save(); + painter.setPen(secHand); + painter.rotate(6.0 * second); + painter.drawLine(0, 15, 0, -80); + painter.restore(); + + // Min + painter.save(); + painter.rotate(6.0 * minute); + painter.setPen(minArm); + painter.drawLine(0, 0, 0, -15); + painter.setPen(minHand); + painter.drawLine(0, -15, 0, -75); + painter.restore(); + + // Hour + painter.save(); + painter.rotate(30.0 * hour); + painter.setPen(hourArm); + painter.drawLine(0, 0, 0, -15); + painter.setPen(hourHand); + painter.drawLine(0, -15, 0, -50); + painter.restore(); + + // Cap + painter.setPen(capPen); + painter.setBrush(capBrush); + painter.drawEllipse(-5, -5, 10, 10); +} diff --git a/app/gui/samples/analogclock/clock.h b/app/gui/samples/analogclock/clock.h new file mode 100644 index 0000000..3045c37 --- /dev/null +++ b/app/gui/samples/analogclock/clock.h @@ -0,0 +1,20 @@ +#ifndef CLOCK_H +#define CLOCK_H + +#include + +class Clock : public QWidget +{ + Q_OBJECT +public: + explicit Clock(QWidget *parent = 0); + +signals: + +public slots: + +protected: + void paintEvent(QPaintEvent *event); +}; + +#endif // CLOCK_H diff --git a/app/gui/samples/analogclock/main.cpp b/app/gui/samples/analogclock/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/app/gui/samples/analogclock/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/app/gui/samples/analogclock/mainwindow.cpp b/app/gui/samples/analogclock/mainwindow.cpp new file mode 100644 index 0000000..49d64fc --- /dev/null +++ b/app/gui/samples/analogclock/mainwindow.cpp @@ -0,0 +1,14 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/app/gui/samples/analogclock/mainwindow.h b/app/gui/samples/analogclock/mainwindow.h new file mode 100644 index 0000000..a3948a9 --- /dev/null +++ b/app/gui/samples/analogclock/mainwindow.h @@ -0,0 +1,22 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/app/gui/samples/analogclock/mainwindow.ui b/app/gui/samples/analogclock/mainwindow.ui new file mode 100644 index 0000000..404f491 --- /dev/null +++ b/app/gui/samples/analogclock/mainwindow.ui @@ -0,0 +1,38 @@ + + + MainWindow + + + + 0 + 0 + 370 + 357 + + + + MainWindow + + + background-color: black + + + + + + + + + + + + + Clock + QWidget +
clock.h
+ 1 +
+
+ + +
-- 2.1.4