-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlabelwidget.cpp
More file actions
106 lines (92 loc) · 2.36 KB
/
labelwidget.cpp
File metadata and controls
106 lines (92 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "labelwidget.h"
#include "labelimage.h"
#include <QKeyEvent>
#include <QtDebug>
LabelWidget::LabelWidget(QWidget *parent)
: QGraphicsView(parent)
{
QGraphicsScene *scene = new QGraphicsScene(this);
scene->setBackgroundBrush(Qt::gray);
setScene(scene);
setTransformationAnchor(AnchorUnderMouse);
setMinimumSize(400, 400);
pImage = NULL;
setFocusPolicy(Qt::StrongFocus);
}
LabelWidget::~LabelWidget()
{
reset();
}
void LabelWidget::reset()
{
if (pImage) {
scene()->removeItem(pImage);
delete pImage;
pImage = NULL;
}
resetMatrix();
}
void LabelWidget::showImage(const cv::Mat& image)
{
reset();
pImage = new LabelImage(this, image);
scene()->addItem(pImage);
pImage->setPos(0,0);
pImage->addEdges(image);
repaint();
setFocus();
}
void LabelWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::MidButton)
{
setInteractive(false);
setDragMode(ScrollHandDrag);
QMouseEvent fake(event->type(), event->pos(), Qt::LeftButton, Qt::LeftButton, event->modifiers());
QGraphicsView::mousePressEvent(&fake);
}
else QGraphicsView::mousePressEvent(event);
}
void LabelWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::MidButton)
{
QMouseEvent fake(event->type(), event->pos(), Qt::LeftButton, Qt::LeftButton, event->modifiers());
QGraphicsView::mouseReleaseEvent(&fake);
setDragMode(NoDrag);
setInteractive(true);
}
else QGraphicsView::mouseReleaseEvent(event);
}
#if QT_CONFIG(wheelevent)
void LabelWidget::wheelEvent(QWheelEvent *event)
{
scaleView(pow((double)2, -event->delta() / 240.0));
}
#endif
void LabelWidget::scaleView(qreal scaleFactor)
{
qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width();
if (factor < 0.07 || factor > 100)
return;
scale(scaleFactor, scaleFactor);
}
void LabelWidget::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Space:
pImage->splitEdge();
break;
case Qt::Key_R:
pImage->reverseAction();
break;
case Qt::Key_T:
pImage->redoAction();
break;
case Qt::Key_C:
pImage->toggleCreateMode();
break;
default:
QGraphicsView::keyPressEvent(event);
}
}