1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Charts module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#include "chartview.h"
31#include <QtGui/QMouseEvent>
32#include <QtCore/QDebug>
33#include <QtCharts/QAbstractAxis>
34#include <QtCharts/QValueAxis>
35
36QT_CHARTS_USE_NAMESPACE
37
38ChartView::ChartView(QWidget *parent)
39 : QChartView(parent)
40{
41}
42
43//![1]
44void ChartView::keyPressEvent(QKeyEvent *event)
45{
46 switch (event->key()) {
47 case Qt::Key_Plus:
48 chart()->zoomIn();
49 break;
50 case Qt::Key_Minus:
51 chart()->zoomOut();
52 break;
53 case Qt::Key_Left:
54 chart()->scroll(dx: -1.0, dy: 0);
55 break;
56 case Qt::Key_Right:
57 chart()->scroll(dx: 1.0, dy: 0);
58 break;
59 case Qt::Key_Up:
60 chart()->scroll(dx: 0, dy: 1.0);
61 break;
62 case Qt::Key_Down:
63 chart()->scroll(dx: 0, dy: -1.0);
64 break;
65 case Qt::Key_Space:
66 switchChartType();
67 break;
68 default:
69 QGraphicsView::keyPressEvent(event);
70 break;
71 }
72}
73//![1]
74
75//![2]
76void ChartView::switchChartType()
77{
78 QChart *newChart;
79 QChart *oldChart = chart();
80
81 if (oldChart->chartType() == QChart::ChartTypeCartesian)
82 newChart = new QPolarChart();
83 else
84 newChart = new QChart();
85
86 // Move series and axes from old chart to new one
87 const QList<QAbstractSeries *> seriesList = oldChart->series();
88 const QList<QAbstractAxis *> axisList = oldChart->axes();
89 QList<QPair<qreal, qreal> > axisRanges;
90
91 for (QAbstractAxis *axis : axisList) {
92 QValueAxis *valueAxis = static_cast<QValueAxis *>(axis);
93 axisRanges.append(t: QPair<qreal, qreal>(valueAxis->min(), valueAxis->max()));
94 }
95
96 for (QAbstractSeries *series : seriesList)
97 oldChart->removeSeries(series);
98
99 for (QAbstractAxis *axis : axisList) {
100 oldChart->removeAxis(axis);
101 newChart->addAxis(axis, alignment: axis->alignment());
102 }
103
104 for (QAbstractSeries *series : seriesList) {
105 newChart->addSeries(series);
106 for (QAbstractAxis *axis : axisList)
107 series->attachAxis(axis);
108 }
109
110 int count = 0;
111 for (QAbstractAxis *axis : axisList) {
112 axis->setRange(min: axisRanges[count].first, max: axisRanges[count].second);
113 count++;
114 }
115
116 newChart->setTitle(oldChart->title());
117 setChart(newChart);
118 delete oldChart;
119}
120//![2]
121

source code of qtcharts/examples/charts/polarchart/chartview.cpp