summaryrefslogtreecommitdiffstats
path: root/examples/charts/chartsgallery/polarchartview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/charts/chartsgallery/polarchartview.cpp')
-rw-r--r--examples/charts/chartsgallery/polarchartview.cpp93
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]