summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2016-12-02 12:10:42 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2016-12-02 10:26:23 +0000
commit0f2552ffd5edc2998306362719d50c4cd6d474e9 (patch)
tree0ac414c8f537c1a6bb836c6f3f7013246b2d6749
parent2c3935a76fbadd5714882795f39ce59049aafb63 (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.cpp2
-rw-r--r--src/charts/axis/polarchartaxis.cpp2
-rw-r--r--src/charts/axis/polarchartaxisangular.cpp2
-rw-r--r--src/charts/axis/polarchartaxisradial.cpp2
-rw-r--r--tests/auto/qlogvalueaxis/tst_qlogvalueaxis.cpp17
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();