Polar Chart Example▲
Sélectionnez
/**
**************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Charts module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
***************************************************************************
*/
#include
"chartview.h"
#include <QtGui/QMouseEvent>
#include <QtCore/QDebug>
#include <QtCharts/QAbstractAxis>
#include <QtCharts/QValueAxis>
QT_CHARTS_USE_NAMESPACE
ChartView::
ChartView(QWidget *
parent)
:
QChartView(parent)
{
}
void
ChartView::
keyPressEvent(QKeyEvent *
event)
{
switch
(event-&
gt;key()) {
case
Qt::
Key_Plus:
chart()-&
gt;zoomIn();
break
;
case
Qt::
Key_Minus:
chart()-&
gt;zoomOut();
break
;
case
Qt::
Key_Left:
chart()-&
gt;scroll(-
1.0
, 0
);
break
;
case
Qt::
Key_Right:
chart()-&
gt;scroll(1.0
, 0
);
break
;
case
Qt::
Key_Up:
chart()-&
gt;scroll(0
, 1.0
);
break
;
case
Qt::
Key_Down:
chart()-&
gt;scroll(0
, -
1.0
);
break
;
case
Qt::
Key_Space:
switchChartType();
break
;
default
:
QGraphicsView::
keyPressEvent(event);
break
;
}
}
void
ChartView::
switchChartType()
{
QChart *
newChart;
QChart *
oldChart =
chart();
if
(oldChart-&
gt;chartType() ==
QChart::
ChartTypeCartesian)
newChart =
new
QPolarChart();
else
newChart =
new
QChart();
// Move series and axes from old chart to new one
const
QList&
lt;QAbstractSeries *&
gt; seriesList =
oldChart-&
gt;series();
const
QList&
lt;QAbstractAxis *&
gt; axisList =
oldChart-&
gt;axes();
QList&
lt;QPair&
lt;qreal, qreal&
gt; &
gt; axisRanges;
for
(QAbstractAxis *
axis : axisList) {
QValueAxis *
valueAxis =
static_cast
&
lt;QValueAxis *&
gt;(axis);
axisRanges.append(QPair&
lt;qreal, qreal&
gt;(valueAxis-&
gt;min(), valueAxis-&
gt;max()));
}
for
(QAbstractSeries *
series : seriesList)
oldChart-&
gt;removeSeries(series);
for
(QAbstractAxis *
axis : axisList) {
oldChart-&
gt;removeAxis(axis);
newChart-&
gt;addAxis(axis, axis-&
gt;alignment());
}
for
(QAbstractSeries *
series : seriesList) {
newChart-&
gt;addSeries(series);
for
(QAbstractAxis *
axis : axisList)
series-&
gt;attachAxis(axis);
}
int
count =
0
;
for
(QAbstractAxis *
axis : axisList) {
axis-&
gt;setRange(axisRanges[count].first, axisRanges[count].second);
count++
;
}
newChart-&
gt;setTitle(oldChart-&
gt;title());
setChart(newChart);
delete
oldChart;
}