diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-12-02 12:10:42 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-12-02 10:26:23 +0000 |
commit | 0f2552ffd5edc2998306362719d50c4cd6d474e9 (patch) | |
tree | 0ac414c8f537c1a6bb836c6f3f7013246b2d6749 | |
parent | 2c3935a76fbadd5714882795f39ce59049aafb63 (diff) |
Fix crash when log axis range is initialized to contain no ticks
Axis updateGeometry() expects there to always be at least one arrow
item for the main axis arrow, but the arrow never got created if
there were no ticks on the axis before axis was shown. Ensure that
createItems() is called at least once for axis even if there are no
ticks.
Task-number: QTBUG-57328
Change-Id: I7847e2f0d4ee1c3e4546dca05df6078b4a4e81c8
Reviewed-by: Mika Salmela <mika.salmela@qt.io>
Reviewed-by: Alexander Mishin <apmishin@yandex.com>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r-- | src/charts/axis/cartesianchartaxis.cpp | 2 | ||||
-rw-r--r-- | src/charts/axis/polarchartaxis.cpp | 2 | ||||
-rw-r--r-- | src/charts/axis/polarchartaxisangular.cpp | 2 | ||||
-rw-r--r-- | src/charts/axis/polarchartaxisradial.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qlogvalueaxis/tst_qlogvalueaxis.cpp | 17 |
5 files changed, 21 insertions, 4 deletions
diff --git a/src/charts/axis/cartesianchartaxis.cpp b/src/charts/axis/cartesianchartaxis.cpp index 9e815922..16ff5b49 100644 --- a/src/charts/axis/cartesianchartaxis.cpp +++ b/src/charts/axis/cartesianchartaxis.cpp @@ -151,7 +151,7 @@ void CartesianChartAxis::updateLayout(QVector<qreal> &layout) if (diff > 0) deleteItems(diff); - else if (diff < 0) + else if (diff <= 0) createItems(-diff); updateMinorTickItems(); diff --git a/src/charts/axis/polarchartaxis.cpp b/src/charts/axis/polarchartaxis.cpp index b9a1c042..cf900c3c 100644 --- a/src/charts/axis/polarchartaxis.cpp +++ b/src/charts/axis/polarchartaxis.cpp @@ -88,7 +88,7 @@ void PolarChartAxis::updateLayout(QVector<qreal> &layout) if (diff > 0) deleteItems(diff); - else if (diff < 0) + else if (diff <= 0) createItems(-diff); updateMinorTickItems(); diff --git a/src/charts/axis/polarchartaxisangular.cpp b/src/charts/axis/polarchartaxisangular.cpp index bda2e086..1be82862 100644 --- a/src/charts/axis/polarchartaxisangular.cpp +++ b/src/charts/axis/polarchartaxisangular.cpp @@ -53,7 +53,7 @@ void PolarChartAxisAngular::updateGeometry() QGraphicsLayoutItem::updateGeometry(); const QVector<qreal> &layout = this->layout(); - if (layout.isEmpty()) + if (layout.isEmpty() && axis()->type() != QAbstractAxis::AxisTypeLogValue) return; createAxisLabels(layout); diff --git a/src/charts/axis/polarchartaxisradial.cpp b/src/charts/axis/polarchartaxisradial.cpp index c20fcb47..f746c038 100644 --- a/src/charts/axis/polarchartaxisradial.cpp +++ b/src/charts/axis/polarchartaxisradial.cpp @@ -49,7 +49,7 @@ PolarChartAxisRadial::~PolarChartAxisRadial() void PolarChartAxisRadial::updateGeometry() { const QVector<qreal> &layout = this->layout(); - if (layout.isEmpty()) + if (layout.isEmpty() && axis()->type() != QAbstractAxis::AxisTypeLogValue) return; createAxisLabels(layout); diff --git a/tests/auto/qlogvalueaxis/tst_qlogvalueaxis.cpp b/tests/auto/qlogvalueaxis/tst_qlogvalueaxis.cpp index 3016007f..26523b4b 100644 --- a/tests/auto/qlogvalueaxis/tst_qlogvalueaxis.cpp +++ b/tests/auto/qlogvalueaxis/tst_qlogvalueaxis.cpp @@ -61,6 +61,8 @@ private slots: void range_raw(); void range_data(); void range(); + void range_before_show_data(); + void range_before_show(); void range_animation_data(); void range_animation(); void noautoscale_data(); @@ -253,6 +255,7 @@ void tst_QLogValueAxis::range_raw_data() QTest::newRow("0.1 - 1.0") << (qreal)0.1 << (qreal)1.0 << (qreal)0.1 << (qreal)1.0 << true << false; QTest::newRow("25.0 - 75.0") << (qreal)25.0 << (qreal)75.0 << (qreal)25.0 << (qreal)75.0 << true << true; QTest::newRow("10.0 - 5.0") << (qreal)10.0 << (qreal)5.0 << (qreal)1.0 << (qreal)1.0 << false << false; + QTest::newRow("2.0 - 7.0") << (qreal)2.0 << (qreal)7.0 << (qreal)2.0 << (qreal)7.0 << true << true; } void tst_QLogValueAxis::range_raw() @@ -292,6 +295,20 @@ void tst_QLogValueAxis::range() range_raw(); } +void tst_QLogValueAxis::range_before_show_data() +{ + range_raw_data(); +} + +void tst_QLogValueAxis::range_before_show() +{ + range_raw(); + + m_chart->setAxisX(m_logvaluesaxis, m_series); + m_view->show(); + QTest::qWaitForWindowShown(m_view); +} + void tst_QLogValueAxis::range_animation_data() { range_data(); |