-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathext_qgraphicsview.cpp
More file actions
102 lines (91 loc) · 3.27 KB
/
ext_qgraphicsview.cpp
File metadata and controls
102 lines (91 loc) · 3.27 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
#include "ext_qgraphicsview.h"
ext_qgraphicsview::ext_qgraphicsview(QWidget *parent) : QGraphicsView(parent)
{
verSB = new QScrollBar(Qt::Vertical);
horSB = new QScrollBar(Qt::Horizontal);
this->setHorizontalScrollBar(horSB);
this->setVerticalScrollBar(verSB);
return;
}
ext_qgraphicsview::~ext_qgraphicsview()
{
delete(horSB);
delete(verSB);
return;
}
void ext_qgraphicsview::wheelEvent(QWheelEvent *wevent)
{
if (wevent->angleDelta().y() == 0)
{
wevent->ignore();
return;
}
int sign = (wevent->angleDelta().y() < 0) ? (1):(-1); // wheel up or wheel down (should've been the opposite, but now as in standard version)
if (wevent->modifiers() == Qt::ControlModifier)
{
if (sign < 0) // we zoom in, so viewScale will be greater than 1 now
{
if (this->transform().m11() * 1.1 > 10) // current value - default equals 1
viewScale = 1;
else
viewScale = 1.1;
}
else
{
if (this->transform().m11() * 0.9 < 0.1)
viewScale = 1;
else
viewScale = 0.9;
// посмотреть дефолтный размер сцены, которая загружается в вью или сам активный размер вью и сравнить это как-то с тем
// какой размер карты загружается во вью - относительно этого динамически задавать ограничения масштаба
// иначе будет костыль, который будет плохо работать на больших или маленьких изображениях, отличных от того, на котором
// провожу тесты я
}
//qDebug() << this->transform().m11(); // qtransform m11 and m22 for scaling
//qDebug() << this->transform().m22();
this->scale(viewScale, viewScale); // i scale view with the same ratio, so i use only one matrix scale value as they are equal
wevent->accept();
return;
}
if (wevent->modifiers() == Qt::ShiftModifier)
horSB->setValue(horSB->value()+(sign)*(horSB->width()/20));
else
verSB->setValue(verSB->value()+(sign)*(verSB->height()/20));
wevent->accept();
return;
}
void ext_qgraphicsview::keyPressEvent (QKeyEvent *kevent)
{
if (kevent->key() != Qt::Key_Escape)
{
kevent->ignore();
return;
}
if (compositeMap::getItemSelected() == true) // check this later
{
if (compositeMap::getSelectedRegion() != nullptr)
{
compositeMap::getSelectedRegion()->resetHighlighting();
compositeMap::setSelectedRegion(nullptr);
}
compositeMap::setItemSelected(false);
}
//this->setVisible(false);
static int counter = 0;
qDebug() << "esc pressed" << counter++;
emit this->onEscPress(); // connect this with focus cancel function
kevent->accept();
return;
}
/*void ext_qgraphicsview::mouseMoveEvent(QMouseEvent *mevent)
{
if (compositeMap::getItemSelected() == true)
{
mevent->accept();
}
else
{
mevent->ignore();
}
return;
}*/