From 0529e02041c3c674c8ec8490d692035f4f5d31ef 2012-03-23 08:43:45 From: Jani Honkonen Date: 2012-03-23 08:43:45 Subject: [PATCH] Add mousebuttons to pie clicked signals --- diff --git a/demos/piechartcustomization/main.cpp b/demos/piechartcustomization/main.cpp index d357378..6bc3ad7 100644 --- a/demos/piechartcustomization/main.cpp +++ b/demos/piechartcustomization/main.cpp @@ -298,7 +298,7 @@ public: *m_series << new CustomSlice(50.0, "Slice 5"); m_chartView->addSeries(m_series); - connect(m_series, SIGNAL(clicked(QPieSlice*)), this, SLOT(handleSliceClicked(QPieSlice*))); + connect(m_series, SIGNAL(clicked(QPieSlice*, Qt::MouseButtons)), this, SLOT(handleSliceClicked(QPieSlice*, Qt::MouseButtons))); // chart settings m_themeComboBox = new QComboBox(); @@ -483,8 +483,10 @@ public Q_SLOTS: m_slice->setExplodeDistanceFactor(m_sliceExplodedFactor->value()); } - void handleSliceClicked(QPieSlice* slice) + void handleSliceClicked(QPieSlice* slice, Qt::MouseButtons buttons) { + Q_UNUSED(buttons); + m_slice = static_cast(slice); // name diff --git a/examples/piechartdrilldown/main.cpp b/examples/piechartdrilldown/main.cpp index 7ad14d8..e7afa10 100644 --- a/examples/piechartdrilldown/main.cpp +++ b/examples/piechartdrilldown/main.cpp @@ -95,12 +95,12 @@ int main(int argc, char *argv[]) foreach (QString month, months) *series << new DrilldownSlice(qrand() % 1000, month, yearSeries); - QObject::connect(series, SIGNAL(clicked(QPieSlice*)), drilldownChart, SLOT(handleSliceClicked(QPieSlice*))); + QObject::connect(series, SIGNAL(clicked(QPieSlice*, Qt::MouseButtons)), drilldownChart, SLOT(handleSliceClicked(QPieSlice*))); *yearSeries << new DrilldownSlice(series->total(), name, series); } - QObject::connect(yearSeries, SIGNAL(clicked(QPieSlice*)), drilldownChart, SLOT(handleSliceClicked(QPieSlice*))); + QObject::connect(yearSeries, SIGNAL(clicked(QPieSlice*, Qt::MouseButtons)), drilldownChart, SLOT(handleSliceClicked(QPieSlice*))); drilldownChart->changeSeries(yearSeries); diff --git a/src/piechart/piechartitem.cpp b/src/piechart/piechartitem.cpp index 281a1b5..17dd2d7 100644 --- a/src/piechart/piechartitem.cpp +++ b/src/piechart/piechartitem.cpp @@ -57,7 +57,7 @@ void PieChartItem::handleSlicesAdded(QList slices) PieSliceItem* item = new PieSliceItem(this); m_slices.insert(s, item); connect(s, SIGNAL(changed()), this, SLOT(handleSliceChanged())); - connect(item, SIGNAL(clicked()), s, SIGNAL(clicked())); + connect(item, SIGNAL(clicked(Qt::MouseButtons)), s, SIGNAL(clicked(Qt::MouseButtons))); connect(item, SIGNAL(hoverEnter()), s, SIGNAL(hoverEnter())); connect(item, SIGNAL(hoverLeave()), s, SIGNAL(hoverLeave())); diff --git a/src/piechart/piesliceitem.cpp b/src/piechart/piesliceitem.cpp index ec9aa27..3caca36 100644 --- a/src/piechart/piesliceitem.cpp +++ b/src/piechart/piesliceitem.cpp @@ -24,7 +24,7 @@ PieSliceItem::PieSliceItem(QGraphicsItem* parent) :QGraphicsObject(parent) { setAcceptHoverEvents(true); - setAcceptedMouseButtons(Qt::LeftButton); + setAcceptedMouseButtons(Qt::MouseButtonMask); setZValue(ChartPresenter::PieSeriesZValue); } @@ -76,9 +76,9 @@ void PieSliceItem::hoverLeaveEvent(QGraphicsSceneHoverEvent* /*event*/) emit hoverLeave(); } -void PieSliceItem::mousePressEvent(QGraphicsSceneMouseEvent* /*event*/) +void PieSliceItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - emit clicked(); + emit clicked(event->buttons()); } void PieSliceItem::setSliceData(PieSliceData sliceData) diff --git a/src/piechart/piesliceitem_p.h b/src/piechart/piesliceitem_p.h index 0163fd1..86dea29 100644 --- a/src/piechart/piesliceitem_p.h +++ b/src/piechart/piesliceitem_p.h @@ -34,7 +34,7 @@ public: // from QGraphicsItem void mousePressEvent(QGraphicsSceneMouseEvent *event); Q_SIGNALS: - void clicked(); + void clicked(Qt::MouseButtons buttons); void hoverEnter(); void hoverLeave(); diff --git a/src/piechart/qpieseries.cpp b/src/piechart/qpieseries.cpp index 2a1f766..78fe8ff 100644 --- a/src/piechart/qpieseries.cpp +++ b/src/piechart/qpieseries.cpp @@ -80,12 +80,12 @@ void QPieSeriesPrivate::sliceChanged() updateDerivativeData(); } -void QPieSeriesPrivate::sliceClicked() +void QPieSeriesPrivate::sliceClicked(Qt::MouseButtons buttons) { QPieSlice* slice = qobject_cast(sender()); Q_ASSERT(m_slices.contains(slice)); Q_Q(QPieSeries); - emit q->clicked(slice); + emit q->clicked(slice, buttons); } void QPieSeriesPrivate::sliceHoverEnter() @@ -240,7 +240,7 @@ void QPieSeries::add(QList slices) foreach (QPieSlice* s, slices) { connect(s, SIGNAL(changed()), d, SLOT(sliceChanged())); - connect(s, SIGNAL(clicked()), d, SLOT(sliceClicked())); + connect(s, SIGNAL(clicked(Qt::MouseButtons)), d, SLOT(sliceClicked(Qt::MouseButtons))); connect(s, SIGNAL(hoverEnter()), d, SLOT(sliceHoverEnter())); connect(s, SIGNAL(hoverLeave()), d, SLOT(sliceHoverLeave())); } diff --git a/src/piechart/qpieseries.h b/src/piechart/qpieseries.h index 26deeed..e1f7aa6 100644 --- a/src/piechart/qpieseries.h +++ b/src/piechart/qpieseries.h @@ -57,7 +57,7 @@ public: void setModelMapping(int modelValuesLine, int modelLabelsLine, Qt::Orientation orientation = Qt::Vertical); Q_SIGNALS: - void clicked(QPieSlice* slice); + void clicked(QPieSlice* slice, Qt::MouseButtons buttons); void hoverEnter(QPieSlice* slice); void hoverLeave(QPieSlice* slice); void added(QList slices); diff --git a/src/piechart/qpieseriesprivate_p.h b/src/piechart/qpieseriesprivate_p.h index 597cba5..f3b86da 100644 --- a/src/piechart/qpieseriesprivate_p.h +++ b/src/piechart/qpieseriesprivate_p.h @@ -16,9 +16,9 @@ public: void updateDerivativeData(); -public Q_SLOTS: // TODO: should be private and not visible in the interface at all +public Q_SLOTS: void sliceChanged(); - void sliceClicked(); + void sliceClicked(Qt::MouseButtons buttons); void sliceHoverEnter(); void sliceHoverLeave(); void modelUpdated(QModelIndex topLeft, QModelIndex bottomRight); diff --git a/src/piechart/qpieslice.h b/src/piechart/qpieslice.h index f1d75b6..a6bc0cb 100644 --- a/src/piechart/qpieslice.h +++ b/src/piechart/qpieslice.h @@ -51,7 +51,7 @@ public: qreal explodeDistanceFactor() const; Q_SIGNALS: - void clicked(); + void clicked(Qt::MouseButtons buttons); void hoverEnter(); void hoverLeave(); void changed();