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 @@ |
| 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 @@ |
| 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 | 142 | multicookmanualwindow.cpp \ |
| 143 | 143 | multicookautowindow.cpp \ |
| 144 | 144 | multicookbook.cpp \ |
| 145 | - haccp.cpp | |
| 145 | + haccp.cpp \ | |
| 146 | + canvas.cpp \ | |
| 147 | + touchtestwindow.cpp | |
| 146 | 148 | |
| 147 | 149 | |
| 148 | 150 | HEADERS += mainwindow.h \ |
| ... | ... | @@ -275,7 +277,9 @@ HEADERS += mainwindow.h \ |
| 275 | 277 | multicookmanualwindow.h \ |
| 276 | 278 | multicookautowindow.h \ |
| 277 | 279 | multicookbook.h \ |
| 278 | - haccp.h | |
| 280 | + haccp.h \ | |
| 281 | + canvas.h \ | |
| 282 | + touchtestwindow.h | |
| 279 | 283 | |
| 280 | 284 | FORMS += mainwindow.ui \ |
| 281 | 285 | manualcookwindow.ui \ |
| ... | ... | @@ -359,7 +363,8 @@ FORMS += mainwindow.ui \ |
| 359 | 363 | multicookwindow.ui \ |
| 360 | 364 | multicookselectionwindow.ui \ |
| 361 | 365 | multicookmanualwindow.ui \ |
| 362 | - multicookautowindow.ui | |
| 366 | + multicookautowindow.ui \ | |
| 367 | + touchtestwindow.ui | |
| 363 | 368 | |
| 364 | 369 | RESOURCES += \ |
| 365 | 370 | resources.qrc | ... | ... |
app/gui/oven_control/touchtestwindow.cpp
| ... | ... | @@ -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 @@ |
| 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 @@ |
| 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> | ... | ... |