Commit e567eba26a7422814e3920403d91a1a781ddf2d7
1 parent
64447473a0
Exists in
master
and in
2 other branches
터치 테스트 윈도우 구현
Showing
6 changed files
with
245 additions
and
3 deletions
Show diff stats
app/gui/oven_control/canvas.cpp
@@ -0,0 +1,83 @@ | @@ -0,0 +1,83 @@ | ||
1 | +#include "canvas.h" | ||
2 | + | ||
3 | +#include <QMouseEvent> | ||
4 | +#include <QPainter> | ||
5 | + | ||
6 | +Canvas::Canvas(QWidget *parent) : QWidget(parent) | ||
7 | +{ | ||
8 | + setAttribute(Qt::WA_StaticContents); | ||
9 | + scribbling = false; | ||
10 | + myPenWidth = 1; | ||
11 | + myPenColor = Qt::blue; | ||
12 | +} | ||
13 | + | ||
14 | +void Canvas::clearImage() | ||
15 | +{ | ||
16 | + image.fill(qRgb(255, 255, 255)); | ||
17 | + update(); | ||
18 | +} | ||
19 | + | ||
20 | +void Canvas::mousePressEvent(QMouseEvent *event) | ||
21 | +{ | ||
22 | + if (event->button() == Qt::LeftButton) { | ||
23 | + lastPoint = event->pos(); | ||
24 | + scribbling = true; | ||
25 | + } | ||
26 | +} | ||
27 | + | ||
28 | +void Canvas::mouseMoveEvent(QMouseEvent *event) | ||
29 | +{ | ||
30 | + if ((event->buttons() & Qt::LeftButton) && scribbling) | ||
31 | + drawLineTo(event->pos()); | ||
32 | +} | ||
33 | + | ||
34 | +void Canvas::mouseReleaseEvent(QMouseEvent *event) | ||
35 | +{ | ||
36 | + if (event->button() == Qt::LeftButton && scribbling) { | ||
37 | + drawLineTo(event->pos()); | ||
38 | + scribbling = false; | ||
39 | + } | ||
40 | +} | ||
41 | + | ||
42 | +void Canvas::paintEvent(QPaintEvent *event) | ||
43 | +{ | ||
44 | + QPainter painter(this); | ||
45 | + QRect dirtyRect = event->rect(); | ||
46 | + painter.drawImage(dirtyRect, image, dirtyRect); | ||
47 | +} | ||
48 | + | ||
49 | +void Canvas::resizeEvent(QResizeEvent *event) | ||
50 | +{ | ||
51 | + if (width() > image.width() || height() > image.height()) { | ||
52 | + int newWidth = qMax(width() + 128, image.width()); | ||
53 | + int newHeight = qMax(height() + 128, image.height()); | ||
54 | + resizeImage(&image, QSize(newWidth, newHeight)); | ||
55 | + update(); | ||
56 | + } | ||
57 | + QWidget::resizeEvent(event); | ||
58 | +} | ||
59 | + | ||
60 | +void Canvas::drawLineTo(const QPoint &endPoint) | ||
61 | +{ | ||
62 | + QPainter painter(&image); | ||
63 | + painter.setPen(QPen(myPenColor, myPenWidth, Qt::SolidLine, Qt::RoundCap, | ||
64 | + Qt::RoundJoin)); | ||
65 | + painter.drawLine(lastPoint, endPoint); | ||
66 | + | ||
67 | + int rad = (myPenWidth / 2) + 2; | ||
68 | + update(QRect(lastPoint, endPoint).normalized() | ||
69 | + .adjusted(-rad, -rad, +rad, +rad)); | ||
70 | + lastPoint = endPoint; | ||
71 | +} | ||
72 | + | ||
73 | +void Canvas::resizeImage(QImage *image, const QSize &newSize) | ||
74 | +{ | ||
75 | + if (image->size() == newSize) | ||
76 | + return; | ||
77 | + | ||
78 | + QImage newImage(newSize, QImage::Format_RGB32); | ||
79 | + newImage.fill(qRgb(255, 255, 255)); | ||
80 | + QPainter painter(&newImage); | ||
81 | + painter.drawImage(QPoint(0, 0), *image); | ||
82 | + *image = newImage; | ||
83 | +} |
app/gui/oven_control/canvas.h
@@ -0,0 +1,38 @@ | @@ -0,0 +1,38 @@ | ||
1 | +#ifndef CANVAS_H | ||
2 | +#define CANVAS_H | ||
3 | + | ||
4 | +#include <QWidget> | ||
5 | +#include <QImage> | ||
6 | +#include <QPoint> | ||
7 | + | ||
8 | +class Canvas : public QWidget | ||
9 | +{ | ||
10 | + Q_OBJECT | ||
11 | +public: | ||
12 | + explicit Canvas(QWidget *parent = 0); | ||
13 | + | ||
14 | +signals: | ||
15 | + | ||
16 | +public slots: | ||
17 | + void clearImage(); | ||
18 | + | ||
19 | +protected: | ||
20 | + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; | ||
21 | + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; | ||
22 | + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; | ||
23 | + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; | ||
24 | + void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; | ||
25 | + | ||
26 | +private: | ||
27 | + void drawLineTo(const QPoint &endPoint); | ||
28 | + void resizeImage(QImage *image, const QSize &newSize); | ||
29 | + | ||
30 | + | ||
31 | + bool scribbling; | ||
32 | + int myPenWidth; | ||
33 | + QColor myPenColor; | ||
34 | + QImage image; | ||
35 | + QPoint lastPoint; | ||
36 | +}; | ||
37 | + | ||
38 | +#endif // CANVAS_H |
app/gui/oven_control/oven_control.pro
@@ -142,7 +142,9 @@ SOURCES += main.cpp\ | @@ -142,7 +142,9 @@ SOURCES += main.cpp\ | ||
142 | multicookmanualwindow.cpp \ | 142 | multicookmanualwindow.cpp \ |
143 | multicookautowindow.cpp \ | 143 | multicookautowindow.cpp \ |
144 | multicookbook.cpp \ | 144 | multicookbook.cpp \ |
145 | - haccp.cpp | 145 | + haccp.cpp \ |
146 | + canvas.cpp \ | ||
147 | + touchtestwindow.cpp | ||
146 | 148 | ||
147 | 149 | ||
148 | HEADERS += mainwindow.h \ | 150 | HEADERS += mainwindow.h \ |
@@ -275,7 +277,9 @@ HEADERS += mainwindow.h \ | @@ -275,7 +277,9 @@ HEADERS += mainwindow.h \ | ||
275 | multicookmanualwindow.h \ | 277 | multicookmanualwindow.h \ |
276 | multicookautowindow.h \ | 278 | multicookautowindow.h \ |
277 | multicookbook.h \ | 279 | multicookbook.h \ |
278 | - haccp.h | 280 | + haccp.h \ |
281 | + canvas.h \ | ||
282 | + touchtestwindow.h | ||
279 | 283 | ||
280 | FORMS += mainwindow.ui \ | 284 | FORMS += mainwindow.ui \ |
281 | manualcookwindow.ui \ | 285 | manualcookwindow.ui \ |
@@ -359,7 +363,8 @@ FORMS += mainwindow.ui \ | @@ -359,7 +363,8 @@ FORMS += mainwindow.ui \ | ||
359 | multicookwindow.ui \ | 363 | multicookwindow.ui \ |
360 | multicookselectionwindow.ui \ | 364 | multicookselectionwindow.ui \ |
361 | multicookmanualwindow.ui \ | 365 | multicookmanualwindow.ui \ |
362 | - multicookautowindow.ui | 366 | + multicookautowindow.ui \ |
367 | + touchtestwindow.ui | ||
363 | 368 | ||
364 | RESOURCES += \ | 369 | RESOURCES += \ |
365 | resources.qrc | 370 | resources.qrc |
app/gui/oven_control/touchtestwindow.cpp
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +#include "touchtestwindow.h" | ||
2 | +#include "ui_touchtestwindow.h" | ||
3 | + | ||
4 | +TouchTestWindow::TouchTestWindow(QWidget *parent) : | ||
5 | + QMainWindow(parent), | ||
6 | + ui(new Ui::TouchTestWindow) | ||
7 | +{ | ||
8 | + ui->setupUi(this); | ||
9 | + | ||
10 | + setAttribute(Qt::WA_DeleteOnClose); | ||
11 | +} | ||
12 | + | ||
13 | +TouchTestWindow::~TouchTestWindow() | ||
14 | +{ | ||
15 | + delete ui; | ||
16 | +} | ||
17 | + | ||
18 | +void TouchTestWindow::on_clearButton_clicked() | ||
19 | +{ | ||
20 | + ui->canvas->clearImage(); | ||
21 | +} | ||
22 | + | ||
23 | +void TouchTestWindow::on_closeButton_clicked() | ||
24 | +{ | ||
25 | + close(); | ||
26 | +} |
app/gui/oven_control/touchtestwindow.h
@@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
1 | +#ifndef TOUCHTESTWINDOW_H | ||
2 | +#define TOUCHTESTWINDOW_H | ||
3 | + | ||
4 | +#include <QMainWindow> | ||
5 | + | ||
6 | +namespace Ui { | ||
7 | +class TouchTestWindow; | ||
8 | +} | ||
9 | + | ||
10 | +class TouchTestWindow : public QMainWindow | ||
11 | +{ | ||
12 | + Q_OBJECT | ||
13 | + | ||
14 | +public: | ||
15 | + explicit TouchTestWindow(QWidget *parent = 0); | ||
16 | + ~TouchTestWindow(); | ||
17 | + | ||
18 | +private slots: | ||
19 | + void on_clearButton_clicked(); | ||
20 | + | ||
21 | + void on_closeButton_clicked(); | ||
22 | + | ||
23 | +private: | ||
24 | + Ui::TouchTestWindow *ui; | ||
25 | +}; | ||
26 | + | ||
27 | +#endif // TOUCHTESTWINDOW_H |
app/gui/oven_control/touchtestwindow.ui
@@ -0,0 +1,63 @@ | @@ -0,0 +1,63 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<ui version="4.0"> | ||
3 | + <class>TouchTestWindow</class> | ||
4 | + <widget class="QMainWindow" name="TouchTestWindow"> | ||
5 | + <property name="geometry"> | ||
6 | + <rect> | ||
7 | + <x>0</x> | ||
8 | + <y>0</y> | ||
9 | + <width>900</width> | ||
10 | + <height>1600</height> | ||
11 | + </rect> | ||
12 | + </property> | ||
13 | + <property name="windowTitle"> | ||
14 | + <string>MainWindow</string> | ||
15 | + </property> | ||
16 | + <widget class="Canvas" name="canvas"> | ||
17 | + <widget class="QPushButton" name="closeButton"> | ||
18 | + <property name="geometry"> | ||
19 | + <rect> | ||
20 | + <x>850</x> | ||
21 | + <y>0</y> | ||
22 | + <width>50</width> | ||
23 | + <height>50</height> | ||
24 | + </rect> | ||
25 | + </property> | ||
26 | + <property name="styleSheet"> | ||
27 | + <string notr="true">QPushButton { border: 1px solid black; } | ||
28 | +QPushButton:pressed { background-color: red; }</string> | ||
29 | + </property> | ||
30 | + <property name="text"> | ||
31 | + <string>X</string> | ||
32 | + </property> | ||
33 | + </widget> | ||
34 | + <widget class="QPushButton" name="clearButton"> | ||
35 | + <property name="geometry"> | ||
36 | + <rect> | ||
37 | + <x>800</x> | ||
38 | + <y>0</y> | ||
39 | + <width>50</width> | ||
40 | + <height>50</height> | ||
41 | + </rect> | ||
42 | + </property> | ||
43 | + <property name="styleSheet"> | ||
44 | + <string notr="true">QPushButton { border: 1px solid black; } | ||
45 | +QPushButton:pressed { background-color: red; }</string> | ||
46 | + </property> | ||
47 | + <property name="text"> | ||
48 | + <string>C</string> | ||
49 | + </property> | ||
50 | + </widget> | ||
51 | + </widget> | ||
52 | + </widget> | ||
53 | + <customwidgets> | ||
54 | + <customwidget> | ||
55 | + <class>Canvas</class> | ||
56 | + <extends>QWidget</extends> | ||
57 | + <header>canvas.h</header> | ||
58 | + <container>1</container> | ||
59 | + </customwidget> | ||
60 | + </customwidgets> | ||
61 | + <resources/> | ||
62 | + <connections/> | ||
63 | +</ui> |