summaryrefslogtreecommitdiffstats
path: root/src/charts/axis/polarchartaxisradial.cpp
diff options
context:
space:
mode:
authorTitta Heikkala <titta.heikkala@theqtcompany.com>2015-08-13 10:46:50 +0300
committerTitta Heikkala <titta.heikkala@theqtcompany.com>2015-09-07 07:56:05 +0000
commitdab4dfead39d02e711a9f2b5bfd7a42b30125fba (patch)
tree653b26cf1beaaa3aedc287ca8c41fd3f1968c0f5 /src/charts/axis/polarchartaxisradial.cpp
parent05fa3caa787974595a2692f708a75813a515adda (diff)
Added minor ticks to value axis
Added possibility to set minor tick for value axis. By default the count of minor ticks is zero. The arrow of minor ticks follows the color and pen of the arrows of the major ticks as it's part of axis. Change-Id: I8a422caaeedcd18ee6144e8636e3903d16f0632c Task-number: QTRD-3294 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>
Diffstat (limited to 'src/charts/axis/polarchartaxisradial.cpp')
-rw-r--r--src/charts/axis/polarchartaxisradial.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/charts/axis/polarchartaxisradial.cpp b/src/charts/axis/polarchartaxisradial.cpp
index 5e3cec5d..af22a03e 100644
--- a/src/charts/axis/polarchartaxisradial.cpp
+++ b/src/charts/axis/polarchartaxisradial.cpp
@@ -47,6 +47,8 @@ void PolarChartAxisRadial::updateGeometry()
QList<QGraphicsItem *> gridItemList = gridItems();
QList<QGraphicsItem *> labelItemList = labelItems();
QList<QGraphicsItem *> shadeItemList = shadeItems();
+ QList<QGraphicsItem *> minorGridItemList = minorGridItems();
+ QList<QGraphicsItem *> minorArrowItemList = minorArrowItems();
QGraphicsTextItem* title = titleItem();
qreal radius = axisGeometry().height() / 2.0;
@@ -200,6 +202,37 @@ void PolarChartAxisRadial::updateGeometry()
shadeItem->setVisible(true);
firstShade = false;
}
+
+ // Minor ticks
+ QValueAxis *valueAxis = qobject_cast<QValueAxis *>(axis());
+ if ((i + 1) != layout.size() && valueAxis) {
+ int minorTickCount = valueAxis->minorTickCount();
+ if (minorTickCount != 0) {
+ qreal minorRadialCoordinate = (layout[i + 1] - layout[i])
+ / qreal(minorTickCount + 1) * 2.0;
+ for (int j = 0; j < minorTickCount; j++) {
+ QGraphicsEllipseItem *minorGridItem =
+ static_cast<QGraphicsEllipseItem *>(minorGridItemList.at(i * minorTickCount + j));
+ QGraphicsLineItem *minorTickItem =
+ static_cast<QGraphicsLineItem *>(minorArrowItemList.at(i * minorTickCount + j));
+
+ QRectF minorGridRect;
+ minorGridRect.setWidth(minorRadialCoordinate * qreal(i + 1)
+ + minorRadialCoordinate * qreal(i * minorTickCount + j));
+ minorGridRect.setHeight(minorRadialCoordinate * qreal(i + 1)
+ + minorRadialCoordinate
+ * qreal(i * minorTickCount + j));
+ minorGridRect.moveCenter(center);
+ minorGridItem->setRect(minorGridRect);
+ minorGridItem->setVisible(true);
+
+ QLineF minorTickLine(-tickWidth() + 1, 0.0, tickWidth() - 1, 0.0);
+ tickLine.translate(center.rx(), minorGridRect.top());
+ minorTickItem->setLine(minorTickLine);
+ minorTickItem->setVisible(true);
+ }
+ }
+ }
}
// Title, along the 0 axis
@@ -275,6 +308,18 @@ void PolarChartAxisRadial::handleGridPenChanged(const QPen &pen)
static_cast<QGraphicsEllipseItem *>(item)->setPen(pen);
}
+void PolarChartAxisRadial::handleMinorArrowPenChanged(const QPen &pen)
+{
+ foreach (QGraphicsItem *item, minorArrowItems())
+ static_cast<QGraphicsLineItem *>(item)->setPen(pen);
+}
+
+void PolarChartAxisRadial::handleMinorGridPenChanged(const QPen &pen)
+{
+ foreach (QGraphicsItem *item, minorGridItems())
+ static_cast<QGraphicsEllipseItem *>(item)->setPen(pen);
+}
+
QSizeF PolarChartAxisRadial::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
Q_UNUSED(which);
@@ -290,6 +335,35 @@ qreal PolarChartAxisRadial::preferredAxisRadius(const QSizeF &maxSize)
return radius;
}
+void PolarChartAxisRadial::updateMinorTickItems()
+{
+ QValueAxis *valueAxis = qobject_cast<QValueAxis *>(this->axis());
+ if (valueAxis) {
+ int currentCount = minorArrowItems().size();
+ int expectedCount = valueAxis->minorTickCount() * (valueAxis->tickCount() - 1);
+ int diff = expectedCount - currentCount;
+ if (diff > 0) {
+ for (int i = 0; i < diff; i++) {
+ QGraphicsLineItem *minorArrow = new QGraphicsLineItem(presenter()->rootItem());
+ QGraphicsEllipseItem *minorGrid = new QGraphicsEllipseItem(presenter()->rootItem());
+ minorArrow->setPen(valueAxis->linePen());
+ minorGrid->setPen(valueAxis->minorGridLinePen());
+ minorArrowGroup()->addToGroup(minorArrow);
+ minorGridGroup()->addToGroup(minorGrid);
+ }
+ } else {
+ QList<QGraphicsItem *> minorGridLines = minorGridItems();
+ QList<QGraphicsItem *> minorArrows = minorArrowItems();
+ for (int i = 0; i > diff; i--) {
+ if (!minorGridLines.isEmpty())
+ delete(minorGridLines.takeLast());
+ if (!minorArrows.isEmpty())
+ delete(minorArrows.takeLast());
+ }
+ }
+ }
+}
+
#include "moc_polarchartaxisradial_p.cpp"
QT_CHARTS_END_NAMESPACE