##// END OF EJS Templates
legendmarker hover signal test and fix
sauimone -
r2210:68629cc35cc4
parent child
Show More
@@ -39,9 +39,18 LegendMarkerItem::LegendMarkerItem(QLegendMarkerPrivate *marker, QGraphicsObject
39 39 m_rectItem(new QGraphicsRectItem(this)),
40 40 m_margin(4),
41 41 m_space(4),
42 m_hovering(false),
42 43 m_pressPos(0, 0)
43 44 {
44 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 56 void LegendMarkerItem::setPen(const QPen &pen)
@@ -160,6 +169,21 QSizeF LegendMarkerItem::sizeHint(Qt::SizeHint which, const QSizeF& constraint)
160 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 187 #include "moc_legendmarkeritem_p.cpp"
164 188
165 189 QTCOMMERCIALCHART_END_NAMESPACE
@@ -48,6 +48,7 class LegendMarkerItem : public QGraphicsObject, public QGraphicsLayoutItem
48 48 Q_INTERFACES(QGraphicsLayoutItem)
49 49 public:
50 50 explicit LegendMarkerItem(QLegendMarkerPrivate *marker, QGraphicsObject *parent = 0);
51 ~LegendMarkerItem();
51 52
52 53 void setPen(const QPen &pen);
53 54 QPen pen() const;
@@ -70,6 +71,9 public:
70 71 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
71 72 QSizeF sizeHint (Qt::SizeHint which, const QSizeF &constraint) const;
72 73
74 void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
75 void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
76
73 77 protected:
74 78 QLegendMarkerPrivate *m_marker; // Knows
75 79 QRectF m_markerRect;
@@ -84,7 +88,7 protected:
84 88 QFont m_font;
85 89 QPen m_pen;
86 90 QBrush m_brush;
87 bool m_visible;
91 bool m_hovering;
88 92
89 93 QPointF m_pressPos;
90 94
@@ -58,6 +58,7 private slots:
58 58 void areaMarkerProperties();
59 59 void xyMarkerPropertiesLine();
60 60 void xyMarkerPropertiesScatter();
61 void markerSignals();
61 62
62 63 private:
63 64
@@ -479,6 +480,71 void tst_QLegend::xyMarkerPropertiesScatter()
479 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 548 QTEST_MAIN(tst_QLegend)
483 549
484 550 #include "tst_qlegend.moc"
General Comments 0
You need to be logged in to leave comments. Login now