@@ -39,9 +39,18 LegendMarkerItem::LegendMarkerItem(QLegendMarkerPrivate *marker, QGraphicsObject | |||||
39 | m_rectItem(new QGraphicsRectItem(this)), |
|
39 | m_rectItem(new QGraphicsRectItem(this)), | |
40 | m_margin(4), |
|
40 | m_margin(4), | |
41 | m_space(4), |
|
41 | m_space(4), | |
|
42 | m_hovering(false), | |||
42 | m_pressPos(0, 0) |
|
43 | m_pressPos(0, 0) | |
43 | { |
|
44 | { | |
44 | m_rectItem->setRect(m_markerRect); |
|
45 | m_rectItem->setRect(m_markerRect); | |
|
46 | setAcceptsHoverEvents(true); | |||
|
47 | } | |||
|
48 | ||||
|
49 | LegendMarkerItem::~LegendMarkerItem() | |||
|
50 | { | |||
|
51 | if (m_hovering) { | |||
|
52 | emit m_marker->q_ptr->hovered(false); | |||
|
53 | } | |||
45 | } |
|
54 | } | |
46 |
|
55 | |||
47 | void LegendMarkerItem::setPen(const QPen &pen) |
|
56 | void LegendMarkerItem::setPen(const QPen &pen) | |
@@ -160,6 +169,21 QSizeF LegendMarkerItem::sizeHint(Qt::SizeHint which, const QSizeF& constraint) | |||||
160 | return sh; |
|
169 | return sh; | |
161 | } |
|
170 | } | |
162 |
|
171 | |||
|
172 | void LegendMarkerItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) | |||
|
173 | { | |||
|
174 | Q_UNUSED(event) | |||
|
175 | m_hovering = true; | |||
|
176 | emit m_marker->q_ptr->hovered(true); | |||
|
177 | } | |||
|
178 | ||||
|
179 | void LegendMarkerItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) | |||
|
180 | { | |||
|
181 | Q_UNUSED(event) | |||
|
182 | m_hovering = false; | |||
|
183 | emit m_marker->q_ptr->hovered(false); | |||
|
184 | } | |||
|
185 | ||||
|
186 | ||||
163 | #include "moc_legendmarkeritem_p.cpp" |
|
187 | #include "moc_legendmarkeritem_p.cpp" | |
164 |
|
188 | |||
165 | QTCOMMERCIALCHART_END_NAMESPACE |
|
189 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -48,6 +48,7 class LegendMarkerItem : public QGraphicsObject, public QGraphicsLayoutItem | |||||
48 | Q_INTERFACES(QGraphicsLayoutItem) |
|
48 | Q_INTERFACES(QGraphicsLayoutItem) | |
49 | public: |
|
49 | public: | |
50 | explicit LegendMarkerItem(QLegendMarkerPrivate *marker, QGraphicsObject *parent = 0); |
|
50 | explicit LegendMarkerItem(QLegendMarkerPrivate *marker, QGraphicsObject *parent = 0); | |
|
51 | ~LegendMarkerItem(); | |||
51 |
|
52 | |||
52 | void setPen(const QPen &pen); |
|
53 | void setPen(const QPen &pen); | |
53 | QPen pen() const; |
|
54 | QPen pen() const; | |
@@ -70,6 +71,9 public: | |||||
70 | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); |
|
71 | void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); | |
71 | QSizeF sizeHint (Qt::SizeHint which, const QSizeF &constraint) const; |
|
72 | QSizeF sizeHint (Qt::SizeHint which, const QSizeF &constraint) const; | |
72 |
|
73 | |||
|
74 | void hoverEnterEvent(QGraphicsSceneHoverEvent *event); | |||
|
75 | void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); | |||
|
76 | ||||
73 | protected: |
|
77 | protected: | |
74 | QLegendMarkerPrivate *m_marker; // Knows |
|
78 | QLegendMarkerPrivate *m_marker; // Knows | |
75 | QRectF m_markerRect; |
|
79 | QRectF m_markerRect; | |
@@ -84,7 +88,7 protected: | |||||
84 | QFont m_font; |
|
88 | QFont m_font; | |
85 | QPen m_pen; |
|
89 | QPen m_pen; | |
86 | QBrush m_brush; |
|
90 | QBrush m_brush; | |
87 |
bool m_ |
|
91 | bool m_hovering; | |
88 |
|
92 | |||
89 | QPointF m_pressPos; |
|
93 | QPointF m_pressPos; | |
90 |
|
94 |
@@ -58,6 +58,7 private slots: | |||||
58 | void areaMarkerProperties(); |
|
58 | void areaMarkerProperties(); | |
59 | void xyMarkerPropertiesLine(); |
|
59 | void xyMarkerPropertiesLine(); | |
60 | void xyMarkerPropertiesScatter(); |
|
60 | void xyMarkerPropertiesScatter(); | |
|
61 | void markerSignals(); | |||
61 |
|
62 | |||
62 | private: |
|
63 | private: | |
63 |
|
64 | |||
@@ -479,6 +480,71 void tst_QLegend::xyMarkerPropertiesScatter() | |||||
479 | TRY_COMPARE(pm->isVisible(), true); |
|
480 | TRY_COMPARE(pm->isVisible(), true); | |
480 | } |
|
481 | } | |
481 |
|
482 | |||
|
483 | void tst_QLegend::markerSignals() | |||
|
484 | { | |||
|
485 | SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); | |||
|
486 | QChart *chart = new QChart(); | |||
|
487 | QLegend *legend = chart->legend(); | |||
|
488 | ||||
|
489 | QBarSeries *bar = new QBarSeries(); | |||
|
490 | QBarSet *set1 = new QBarSet(QString("set 1")); | |||
|
491 | *set1 << 10 << 10 << 10; | |||
|
492 | bar->append(set1); | |||
|
493 | QBarSet *set2 = new QBarSet(QString("set 2")); | |||
|
494 | *set2 << 10 << 10 << 10; | |||
|
495 | bar->append(set2); | |||
|
496 | chart->addSeries(bar); | |||
|
497 | ||||
|
498 | QPieSeries *pie = new QPieSeries(); | |||
|
499 | pie->append(QString("slice1"), 1); | |||
|
500 | pie->append(QString("slice2"), 2); | |||
|
501 | pie->append(QString("slice3"), 3); | |||
|
502 | chart->addSeries(pie); | |||
|
503 | legend->setAlignment(Qt::AlignRight); | |||
|
504 | ||||
|
505 | QLineSeries *line = new QLineSeries(); | |||
|
506 | line->setName(QString("Line 1")); | |||
|
507 | line->append(1,1); | |||
|
508 | chart->addSeries(line); | |||
|
509 | ||||
|
510 | QAreaSeries *area = new QAreaSeries(); | |||
|
511 | area->setName(QString("Area 1")); | |||
|
512 | QLineSeries *upper = new QLineSeries(); | |||
|
513 | QLineSeries *lower = new QLineSeries(); | |||
|
514 | upper->append(2,2); | |||
|
515 | lower->append(1,1); | |||
|
516 | area->setUpperSeries(upper); | |||
|
517 | area->setLowerSeries(lower); | |||
|
518 | chart->addSeries(area); | |||
|
519 | ||||
|
520 | QScatterSeries *scatter = new QScatterSeries(); | |||
|
521 | scatter->setName(QString("Scatter")); | |||
|
522 | scatter->append(3,3); | |||
|
523 | chart->addSeries(scatter); | |||
|
524 | ||||
|
525 | QList<QSignalSpy *> spies; | |||
|
526 | foreach(QLegendMarker *m, legend->markers()) { | |||
|
527 | QSignalSpy *spy = new QSignalSpy(m, SIGNAL(hovered(bool))); | |||
|
528 | spies.append(spy); | |||
|
529 | } | |||
|
530 | ||||
|
531 | QChartView view(chart); | |||
|
532 | view.resize(400,300); | |||
|
533 | view.show(); | |||
|
534 | QTest::qWaitForWindowShown(&view); | |||
|
535 | ||||
|
536 | // Sweep mouse over all legend items | |||
|
537 | for ( int i = 0; i < 300; i++ ) { | |||
|
538 | QTest::mouseMove(view.viewport(), QPoint(333,i)); | |||
|
539 | } | |||
|
540 | ||||
|
541 | foreach(QSignalSpy *spy, spies) { | |||
|
542 | TRY_COMPARE(spy->count(), 2); | |||
|
543 | } | |||
|
544 | ||||
|
545 | qDeleteAll(spies); | |||
|
546 | } | |||
|
547 | ||||
482 | QTEST_MAIN(tst_QLegend) |
|
548 | QTEST_MAIN(tst_QLegend) | |
483 |
|
549 | |||
484 | #include "tst_qlegend.moc" |
|
550 | #include "tst_qlegend.moc" |
General Comments 0
You need to be logged in to leave comments.
Login now