v2.0.0
Loading...
Searching...
No Matches
draggableframelesswidget.cpp
Go to the documentation of this file.
1//=============================================================================================================
14
15//=============================================================================================================
16// INCLUDES
17//=============================================================================================================
18
20
21//=============================================================================================================
22// QT INCLUDES
23//=============================================================================================================
24
25#include <QWidget>
26#include <QMouseEvent>
27
28//=============================================================================================================
29// EIGEN INCLUDES
30//=============================================================================================================
31
32//=============================================================================================================
33// USED NAMESPACES
34//=============================================================================================================
35
36using namespace DISPLIB;
37
38//=============================================================================================================
39// DEFINE MEMBER METHODS
40//=============================================================================================================
41
43 Qt::WindowFlags flags,
44 bool bRoundEdges,
45 bool bDraggable,
46 bool bFrameless)
47: QWidget(parent, flags)
48, m_bRoundEdges(bRoundEdges)
49, m_bDraggable(bDraggable)
50, m_bMousePressed(false)
51{
52 this->setWindowFlag(Qt::CustomizeWindowHint, bFrameless);
53 this->adjustSize();
54}
55
56//=============================================================================================================
57
61
62//=============================================================================================================
63
65{
66 m_bDraggable = bFlag;
67}
68
69//=============================================================================================================
70
72{
73 if(!m_bDraggable) {
74 return QWidget::mousePressEvent(event);
75 }
76
77 if (event->button() == Qt::LeftButton) {
78 m_dragPosition = event->globalPosition().toPoint() - frameGeometry().topLeft();
79 event->accept();
80 m_bMousePressed = true;
81 }
82}
83
84//=============================================================================================================
85
87{
88 if(!m_bDraggable) {
89 return QWidget::mouseMoveEvent(event);
90 }
91
92 if ((event->buttons() & Qt::LeftButton) && m_bMousePressed) {
93 move(event->globalPosition().toPoint() - m_dragPosition);
94 event->accept();
95 }
96}
97
98//=============================================================================================================
99
101{
102 if(event->button() == Qt::LeftButton) {
103 m_bMousePressed = false;
104 }
105}
106
107//=============================================================================================================
108
109void DraggableFramelessWidget::resizeEvent(QResizeEvent * /* event */)
110{
111 if(m_bRoundEdges) {
112 setMask(roundedRect(QRect(0,0,width(),height()),10));
113 }
114}
115
116//=============================================================================================================
117
118QRegion DraggableFramelessWidget::roundedRect(const QRect& rect, int r)
119{
120 QRegion region;
121 // middle and borders
122 region += rect.adjusted(r, 0, -r, 0);
123 region += rect.adjusted(0, r, 0, -r);
124 // top left
125 QRect corner(rect.topLeft(), QSize(r*2, r*2));
126 region += QRegion(corner, QRegion::Ellipse);
127 // top right
128 corner.moveTopRight(rect.topRight());
129 region += QRegion(corner, QRegion::Ellipse);
130 // bottom left
131 corner.moveBottomLeft(rect.bottomLeft());
132 region += QRegion(corner, QRegion::Ellipse);
133 // bottom right
134 corner.moveBottomRight(rect.bottomRight());
135 region += QRegion(corner, QRegion::Ellipse);
136 return region;
137}
Frameless QWidget that can be dragged by clicking anywhere on its body.
2-D display widgets and visualisation helpers (charts, topography, colour maps).
QRegion roundedRect(const QRect &rect, int r)
DraggableFramelessWidget(QWidget *parent=0, Qt::WindowFlags flags=Qt::Window, bool bRoundEdges=false, bool bDraggable=true, bool bFrameless=true)