diff options
Diffstat (limited to 'examples/charts/chartsgallery/polarchartview.cpp')
-rw-r--r-- | examples/charts/chartsgallery/polarchartview.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/examples/charts/chartsgallery/polarchartview.cpp b/examples/charts/chartsgallery/polarchartview.cpp new file mode 100644 index 00000000..751ae45f --- /dev/null +++ b/examples/charts/chartsgallery/polarchartview.cpp @@ -0,0 +1,93 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "polarchartview.h" + +#include <QAbstractAxis> +#include <QMouseEvent> +#include <QPolarChart> +#include <QValueAxis> + +PolarChartView::PolarChartView(QWidget *parent) + : QChartView(parent) +{ +} + +//![1] +void PolarChartView::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) { + case Qt::Key_Plus: + chart()->zoomIn(); + break; + case Qt::Key_Minus: + chart()->zoomOut(); + break; + case Qt::Key_Left: + chart()->scroll(-1.0, 0); + break; + case Qt::Key_Right: + chart()->scroll(1.0, 0); + break; + case Qt::Key_Up: + chart()->scroll(0, 1.0); + break; + case Qt::Key_Down: + chart()->scroll(0, -1.0); + break; + case Qt::Key_Space: + switchChartType(); + break; + default: + QGraphicsView::keyPressEvent(event); + break; + } +} +//![1] + +//![2] +void PolarChartView::switchChartType() +{ + QChart *newChart; + QChart *oldChart = chart(); + + if (oldChart->chartType() == QChart::ChartTypeCartesian) + newChart = new QPolarChart; + else + newChart = new QChart; + + // Move series and axes from old chart to new one + const QList<QAbstractSeries *> seriesList = oldChart->series(); + const QList<QAbstractAxis *> axisList = oldChart->axes(); + QList<QPair<qreal, qreal> > axisRanges; + + for (QAbstractAxis *axis : axisList) { + auto valueAxis = static_cast<QValueAxis *>(axis); + axisRanges.append(QPair<qreal, qreal>(valueAxis->min(), valueAxis->max())); + } + + for (QAbstractSeries *series : seriesList) + oldChart->removeSeries(series); + + for (QAbstractAxis *axis : axisList) { + oldChart->removeAxis(axis); + newChart->addAxis(axis, axis->alignment()); + } + + for (QAbstractSeries *series : seriesList) { + newChart->addSeries(series); + for (QAbstractAxis *axis : axisList) + series->attachAxis(axis); + } + + int count = 0; + for (QAbstractAxis *axis : axisList) { + axis->setRange(axisRanges[count].first, axisRanges[count].second); + count++; + } + + newChart->setTitle(oldChart->title()); + setChart(newChart); + delete oldChart; +} +//![2] |