summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2017-07-25 10:53:46 +0200
committerAndy Shaw <andy.shaw@qt.io>2017-08-08 09:07:30 +0000
commitbd1192957248edb189f697da6c4b57bc8e004543 (patch)
treeb682c4e56b4d03526e073dd33e5a04eb71493e31
parentc5af1dd3af0a59166672fa30f24c3039c532cd7d (diff)
BarSeries: Account for labels when hovering over the bar
If you hover over a label then it will send a hoverLeaveEvent() because the label is not accounted for. So we set the labels to not accept hover events to ensure they don't interfere with the bar. Task-number: QTBUG-62137 Change-Id: I59097d14a7ce73948eda7a8332f927d1d465b273 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/charts/barchart/abstractbarchartitem.cpp1
-rw-r--r--tests/auto/qbarseries/tst_qbarseries.cpp111
2 files changed, 70 insertions, 42 deletions
diff --git a/src/charts/barchart/abstractbarchartitem.cpp b/src/charts/barchart/abstractbarchartitem.cpp
index f62c0ef7..910066b5 100644
--- a/src/charts/barchart/abstractbarchartitem.cpp
+++ b/src/charts/barchart/abstractbarchartitem.cpp
@@ -500,6 +500,7 @@ void AbstractBarChartItem::createLabelItems()
QGraphicsTextItem *label = bars.at(j)->labelItem();
if (!label) {
QGraphicsTextItem *newLabel = new QGraphicsTextItem(this);
+ newLabel->setAcceptHoverEvents(false);
newLabel->document()->setDocumentMargin(ChartPresenter::textMargin());
bars.at(j)->setLabelItem(newLabel);
}
diff --git a/tests/auto/qbarseries/tst_qbarseries.cpp b/tests/auto/qbarseries/tst_qbarseries.cpp
index 8922af25..5fe2808c 100644
--- a/tests/auto/qbarseries/tst_qbarseries.cpp
+++ b/tests/auto/qbarseries/tst_qbarseries.cpp
@@ -621,16 +621,24 @@ void tst_QBarSeries::mouseclicked()
void tst_QBarSeries::mousehovered_data()
{
-
+ QTest::addColumn<uint>("labelsPosition");
+ QTest::addColumn<bool>("labelsVisible");
+
+ QTest::newRow("labelsCenter") << (uint)QAbstractBarSeries::LabelsCenter << true;
+ QTest::newRow("labelsInsideEnd") << (uint)QAbstractBarSeries::LabelsInsideEnd << true;
+ QTest::newRow("labelsInsideBase") << (uint)QAbstractBarSeries::LabelsInsideBase << true;
+ QTest::newRow("labelsOutsideEnd") << (uint)QAbstractBarSeries::LabelsOutsideEnd << true;
+ QTest::newRow("noLabelsCenter") << (uint)QAbstractBarSeries::LabelsCenter << false;
}
void tst_QBarSeries::mousehovered()
{
- SKIP_IF_CANNOT_TEST_MOUSE_EVENTS();
- SKIP_IF_FLAKY_MOUSE_MOVE();
+ QFETCH(uint, labelsPosition);
+ QFETCH(bool, labelsVisible);
QBarSeries* series = new QBarSeries();
-
+ series->setLabelsVisible(labelsVisible);
+ series->setLabelsPosition(static_cast<QAbstractBarSeries::LabelsPosition>(labelsPosition));
QBarSet* set1 = new QBarSet(QString("set 1"));
*set1 << 10 << 10 << 10;
series->append(set1);
@@ -683,21 +691,24 @@ void tst_QBarSeries::mousehovered()
layout.append(rect);
}
}
+ // In order to make it feel like a normal user moving the mouse, we hover across from the edge.
+ // If we go right to the center, we can hit a label which does not emit hovered then, but that
+ // would not be a normal use case.
//=======================================================================
// move mouse to left border
QTest::mouseMove(view.viewport(), QPoint(0, layout.at(0).center().y()));
- QCoreApplication::processEvents(QEventLoop::AllEvents, 10000);
- TRY_COMPARE(seriesIndexSpy.count(), 0);
- TRY_COMPARE(setIndexSpy1.count(), 0);
- TRY_COMPARE(setIndexSpy2.count(), 0);
+ QTest::qWait(5000);
+ QCOMPARE(seriesIndexSpy.count(), 0);
+ QCOMPARE(setIndexSpy1.count(), 0);
+ QCOMPARE(setIndexSpy2.count(), 0);
//=======================================================================
-// move mouse on top of set1
- QTest::mouseMove(view.viewport(), layout.at(0).center().toPoint());
- TRY_COMPARE(seriesIndexSpy.count(), 1);
- TRY_COMPARE(setIndexSpy1.count(), 1);
- TRY_COMPARE(setIndexSpy2.count(), 0);
+// move mouse to just inside left border to account for labels
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(0).x() + 1, layout.at(0).y() + 1));
+ QTRY_COMPARE(seriesIndexSpy.count(), 1);
+ QTRY_COMPARE(setIndexSpy1.count(), 1);
+ QTRY_COMPARE(setIndexSpy2.count(), 0);
QList<QVariant> seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
@@ -709,11 +720,27 @@ void tst_QBarSeries::mousehovered()
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
//=======================================================================
+// move mouse to center of set1
+ QTest::mouseMove(view.viewport(), layout.at(0).center().toPoint());
+ QTest::qWait(5000);
+ QCOMPARE(seriesIndexSpy.count(), 0);
+ QCOMPARE(setIndexSpy1.count(), 0);
+ QCOMPARE(setIndexSpy2.count(), 0);
+
+//=======================================================================
+// move mouse to bottom of set1
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(0).center().x(), layout.at(0).bottom()));
+ QTest::qWait(5000);
+ QCOMPARE(seriesIndexSpy.count(), 0);
+ QCOMPARE(setIndexSpy1.count(), 0);
+ QCOMPARE(setIndexSpy2.count(), 0);
+
+//=======================================================================
// move mouse from top of set1 to top of set2
- QTest::mouseMove(view.viewport(), layout.at(1).center().toPoint());
- TRY_COMPARE(seriesIndexSpy.count(), 2);
- TRY_COMPARE(setIndexSpy1.count(), 1);
- TRY_COMPARE(setIndexSpy2.count(), 1);
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(1).x() + 1, layout.at(1).y() + 1));
+ QTRY_COMPARE(seriesIndexSpy.count(), 2);
+ QTRY_COMPARE(setIndexSpy1.count(), 1);
+ QTRY_COMPARE(setIndexSpy2.count(), 1);
// should leave set1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -738,9 +765,9 @@ void tst_QBarSeries::mousehovered()
//=======================================================================
// move mouse from top of set2 to background
QTest::mouseMove(view.viewport(), QPoint(layout.at(1).center().x(), 0));
- TRY_COMPARE(seriesIndexSpy.count(), 1);
- TRY_COMPARE(setIndexSpy1.count(), 0);
- TRY_COMPARE(setIndexSpy2.count(), 1);
+ QTRY_COMPARE(seriesIndexSpy.count(), 1);
+ QTRY_COMPARE(setIndexSpy1.count(), 0);
+ QTRY_COMPARE(setIndexSpy2.count(), 1);
// should leave set2
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -754,11 +781,11 @@ void tst_QBarSeries::mousehovered()
//=======================================================================
// move mouse on top of set1, bar0 to check the index (hover into set1)
- QTest::mouseMove(view.viewport(), layout.at(0).center().toPoint());
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(0).x() + 1, layout.at(0).y() + 1));
- TRY_COMPARE(seriesIndexSpy.count(), 1);
- TRY_COMPARE(setIndexSpy1.count(), 1);
- TRY_COMPARE(setIndexSpy2.count(), 0);
+ QTRY_COMPARE(seriesIndexSpy.count(), 1);
+ QTRY_COMPARE(setIndexSpy1.count(), 1);
+ QTRY_COMPARE(setIndexSpy2.count(), 0);
//should enter set1, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -777,11 +804,11 @@ void tst_QBarSeries::mousehovered()
//=======================================================================
// move mouse on top of set2, bar0 to check the index (hover out set1,
// hover in set1)
- QTest::mouseMove(view.viewport(), layout.at(1).center().toPoint());
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(1).x() + 1, layout.at(1).y() + 1));
- TRY_COMPARE(seriesIndexSpy.count(), 2);
- TRY_COMPARE(setIndexSpy1.count(), 1);
- TRY_COMPARE(setIndexSpy2.count(), 1);
+ QTRY_COMPARE(seriesIndexSpy.count(), 2);
+ QTRY_COMPARE(setIndexSpy1.count(), 1);
+ QTRY_COMPARE(setIndexSpy2.count(), 1);
// should leave set1, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -814,11 +841,11 @@ void tst_QBarSeries::mousehovered()
//=======================================================================
// move mouse on top of set1, bar1 to check the index (hover out set 2,
// hover in set1)
- QTest::mouseMove(view.viewport(), layout.at(2).center().toPoint());
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(2).x() + 1, layout.at(2).y() + 1));
- TRY_COMPARE(seriesIndexSpy.count(), 2);
- TRY_COMPARE(setIndexSpy1.count(), 1);
- TRY_COMPARE(setIndexSpy2.count(), 1);
+ QTRY_COMPARE(seriesIndexSpy.count(), 2);
+ QTRY_COMPARE(setIndexSpy1.count(), 1);
+ QTRY_COMPARE(setIndexSpy2.count(), 1);
// should leave set2, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -853,9 +880,9 @@ void tst_QBarSeries::mousehovered()
// (hover out set1)
QTest::mouseMove(view.viewport(), QPoint((layout.at(2).right() + layout.at(3).left()) / 2, 0));
- TRY_COMPARE(seriesIndexSpy.count(), 1);
- TRY_COMPARE(setIndexSpy1.count(), 1);
- TRY_COMPARE(setIndexSpy2.count(), 0);
+ QTRY_COMPARE(seriesIndexSpy.count(), 1);
+ QTRY_COMPARE(setIndexSpy1.count(), 1);
+ QTRY_COMPARE(setIndexSpy2.count(), 0);
// should leave set1, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -873,11 +900,11 @@ void tst_QBarSeries::mousehovered()
//=======================================================================
// move mouse on top of set2, bar1 to check the index (hover in set2)
- QTest::mouseMove(view.viewport(), layout.at(3).center().toPoint());
+ QTest::mouseMove(view.viewport(), QPoint(layout.at(3).x() + 1, layout.at(3).y() + 1));
- TRY_COMPARE(seriesIndexSpy.count(), 1);
- TRY_COMPARE(setIndexSpy1.count(), 0);
- TRY_COMPARE(setIndexSpy2.count(), 1);
+ QTRY_COMPARE(seriesIndexSpy.count(), 1);
+ QTRY_COMPARE(setIndexSpy1.count(), 0);
+ QTRY_COMPARE(setIndexSpy2.count(), 1);
// should enter set2, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
@@ -898,9 +925,9 @@ void tst_QBarSeries::mousehovered()
//(hover out set2)
QTest::mouseMove(view.viewport(), QPoint((layout.at(3).right() + layout.at(3).left()) / 2, 0));
- TRY_COMPARE(seriesIndexSpy.count(), 1);
- TRY_COMPARE(setIndexSpy1.count(), 0);
- TRY_COMPARE(setIndexSpy2.count(), 1);
+ QTRY_COMPARE(seriesIndexSpy.count(), 1);
+ QTRY_COMPARE(setIndexSpy1.count(), 0);
+ QTRY_COMPARE(setIndexSpy2.count(), 1);
// should leave set2, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();