-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcolortank.cpp
69 lines (54 loc) · 1.26 KB
/
colortank.cpp
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
#include "colortank.h"
#include <QtWidgets>
ColorTank::ColorTank()
{
init();
}
void ColorTank::setColor(const QColor &color)
{
_color = color;
update();
}
QRectF ColorTank::boundingRect() const
{
return QRectF(-40, -40, 80, 80);
}
void ColorTank::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
painter->setRenderHint(QPainter::Antialiasing);
painter->setBrush(_dragOver ? _color.light(130) : _color);
painter->drawEllipse(boundingRect());
}
void ColorTank::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
if (event->mimeData()->hasColor())
{
event->setAccepted(true);
_dragOver = true;
update();
}
else event->setAccepted(false);
}
void ColorTank::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
{
Q_UNUSED(event)
_dragOver = false;
update();
}
void ColorTank::dropEvent(QGraphicsSceneDragDropEvent *event)
{
if (event->mimeData()->hasColor())
{
setColor(qvariant_cast<QColor>(event->mimeData()->colorData()));
}
_dragOver = false;
}
void ColorTank::init()
{
_dragOver = false;
_color = QRandomGenerator::global()->generate();
setColor(_color);
setAcceptDrops(true);
}