diff options
Diffstat (limited to 'src/charts/barchart/bar.cpp')
-rw-r--r-- | src/charts/barchart/bar.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/charts/barchart/bar.cpp b/src/charts/barchart/bar.cpp index 400fd58b..6338dbea 100644 --- a/src/charts/barchart/bar.cpp +++ b/src/charts/barchart/bar.cpp @@ -21,16 +21,20 @@ #include <private/bar_p.h> #include <QtGui/QPainter> #include <QtWidgets/QGraphicsSceneEvent> +#include <QtWidgets/QStyleOptionGraphicsItem> +#include <QtWidgets/QStyle> QT_CHARTS_BEGIN_NAMESPACE Bar::Bar(QBarSet *barset, int index, QGraphicsItem *parent) : QGraphicsRectItem(parent), m_index(index), m_barset(barset), - m_hovering(false) + m_hovering(false), + m_mousePressed(false) { setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton); setAcceptHoverEvents(true); + setFlag(QGraphicsItem::ItemIsSelectable); } Bar::~Bar() @@ -42,8 +46,9 @@ Bar::~Bar() void Bar::mousePressEvent(QGraphicsSceneMouseEvent *event) { - Q_UNUSED(event) - emit clicked(m_index, m_barset); + emit pressed(m_index, m_barset); + m_lastMousePos = event->pos(); + m_mousePressed = true; QGraphicsItem::mousePressEvent(event); } @@ -62,6 +67,29 @@ void Bar::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) emit hovered(false, m_index, m_barset); } +void Bar::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + emit released(m_index, m_barset); + if (m_lastMousePos == event->pos() && m_mousePressed) + emit clicked(m_index, m_barset); + m_mousePressed = false; + QGraphicsItem::mouseReleaseEvent(event); +} + +void Bar::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + emit doubleClicked(m_index, m_barset); + QGraphicsItem::mouseDoubleClickEvent(event); +} + +void Bar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + // Remove selection border around bar + QStyleOptionGraphicsItem barOption(*option); + barOption.state &= ~QStyle::State_Selected; + QGraphicsRectItem::paint(painter, &barOption, widget); +} + #include "moc_bar_p.cpp" QT_CHARTS_END_NAMESPACE |