diff options
Diffstat (limited to 'src/charts/scatterchart/scatterchartitem_p.h')
-rw-r--r-- | src/charts/scatterchart/scatterchartitem_p.h | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/src/charts/scatterchart/scatterchartitem_p.h b/src/charts/scatterchart/scatterchartitem_p.h index 7e27b1c1..4f1abe02 100644 --- a/src/charts/scatterchart/scatterchartitem_p.h +++ b/src/charts/scatterchart/scatterchartitem_p.h @@ -34,6 +34,7 @@ #include <private/xychart_p.h> #include <QtWidgets/QGraphicsEllipseItem> #include <QtGui/QPen> +#include <QtWidgets/QGraphicsSceneMouseEvent> QT_CHARTS_BEGIN_NAMESPACE @@ -56,6 +57,15 @@ public: void markerSelected(QGraphicsItem *item); void markerHovered(QGraphicsItem *item, bool state); + void markerPressed(QGraphicsItem *item); + void markerReleased(QGraphicsItem *item); + void markerDoubleClicked(QGraphicsItem *item); + + void setLastMousePosition(const QPointF pos) {m_lastMousePos = pos;} + QPointF lastMousePosition() const {return m_lastMousePos;} + void setMousePressed(bool pressed = true) {m_mousePressed = pressed;} + bool mousePressed() {return m_mousePressed;} + public Q_SLOTS: void handleUpdated(); @@ -80,6 +90,9 @@ private: QString m_pointLabelsFormat; QFont m_pointLabelsFont; QColor m_pointLabelsColor; + + QPointF m_lastMousePos; + bool m_mousePressed; }; class CircleMarker: public QGraphicsEllipseItem @@ -91,13 +104,16 @@ public: m_parent(parent) { setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsSelectable); } protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) { QGraphicsEllipseItem::mousePressEvent(event); - m_parent->markerSelected(this); + m_parent->markerPressed(this); + m_parent->setLastMousePosition(event->pos()); + m_parent->setMousePressed(); } void hoverEnterEvent(QGraphicsSceneHoverEvent *event) { @@ -109,6 +125,19 @@ protected: QGraphicsEllipseItem::hoverLeaveEvent(event); m_parent->markerHovered(this, false); } + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) + { + QGraphicsEllipseItem::mouseReleaseEvent(event); + m_parent->markerReleased(this); + if (m_parent->lastMousePosition() == event->pos() && m_parent->mousePressed()) + m_parent->markerSelected(this); + m_parent->setMousePressed(false); + } + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) + { + QGraphicsEllipseItem::mouseDoubleClickEvent(event); + m_parent->markerDoubleClicked(this); + } private: ScatterChartItem *m_parent; @@ -123,13 +152,16 @@ public: m_parent(parent) { setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsSelectable); } protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) { QGraphicsRectItem::mousePressEvent(event); - m_parent->markerSelected(this); + m_parent->markerPressed(this); + m_parent->setLastMousePosition(event->pos()); + m_parent->setMousePressed(); } void hoverEnterEvent(QGraphicsSceneHoverEvent *event) { @@ -141,6 +173,19 @@ protected: QGraphicsRectItem::hoverLeaveEvent(event); m_parent->markerHovered(this, false); } + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) + { + QGraphicsRectItem::mouseReleaseEvent(event); + m_parent->markerReleased(this); + if (m_parent->lastMousePosition() == event->pos() && m_parent->mousePressed()) + m_parent->markerSelected(this); + m_parent->setMousePressed(false); + } + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) + { + QGraphicsRectItem::mouseDoubleClickEvent(event); + m_parent->markerDoubleClicked(this); + } private: ScatterChartItem *m_parent; |