chartview.cpp
109 lines
| 2.9 KiB
| text/x-c
|
CppLexer
Miikka Heikkinen
|
r2483 | /**************************************************************************** | ||
** | ||||
Titta Heikkala
|
r2776 | ** Copyright (C) 2015 The Qt Company Ltd | ||
Miikka Heikkinen
|
r2483 | ** All rights reserved. | ||
Titta Heikkala
|
r2776 | ** For any questions to The Qt Company, please use contact form at http://qt.io | ||
Miikka Heikkinen
|
r2483 | ** | ||
Titta Heikkala
|
r2740 | ** This file is part of the Qt Charts module. | ||
Miikka Heikkinen
|
r2483 | ** | ||
Titta Heikkala
|
r2740 | ** Licensees holding valid commercial license for Qt may use this file in | ||
** accordance with the Qt License Agreement provided with the Software | ||||
** or, alternatively, in accordance with the terms contained in a written | ||||
Titta Heikkala
|
r2776 | ** agreement between you and The Qt Company. | ||
Miikka Heikkinen
|
r2483 | ** | ||
** If you have questions regarding the use of this file, please use | ||||
Titta Heikkala
|
r2740 | ** contact form at http://qt.io | ||
Miikka Heikkinen
|
r2483 | ** | ||
****************************************************************************/ | ||||
#include "chartview.h" | ||||
Titta Heikkala
|
r2714 | #include <QtGui/QMouseEvent> | ||
#include <QtCore/QDebug> | ||||
#include <QtCharts/QAbstractAxis> | ||||
#include <QtCharts/QValueAxis> | ||||
Miikka Heikkinen
|
r2483 | |||
Titta Heikkala
|
r2712 | QT_CHARTS_USE_NAMESPACE | ||
Miikka Heikkinen
|
r2483 | |||
ChartView::ChartView(QWidget *parent) | ||||
: QChartView(parent) | ||||
{ | ||||
} | ||||
//![1] | ||||
void ChartView::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 ChartView::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 | ||||
QList<QAbstractSeries *> seriesList = oldChart->series(); | ||||
QList<QAbstractAxis *> axisList = oldChart->axes(); | ||||
Miikka Heikkinen
|
r2485 | QList<QPair<qreal, qreal> > axisRanges; | ||
Miikka Heikkinen
|
r2483 | |||
foreach (QAbstractAxis *axis, axisList) { | ||||
QValueAxis *valueAxis = static_cast<QValueAxis *>(axis); | ||||
axisRanges.append(QPair<qreal, qreal>(valueAxis->min(), valueAxis->max())); | ||||
} | ||||
foreach (QAbstractSeries *series, seriesList) | ||||
oldChart->removeSeries(series); | ||||
foreach (QAbstractAxis *axis, axisList) { | ||||
oldChart->removeAxis(axis); | ||||
newChart->addAxis(axis, axis->alignment()); | ||||
} | ||||
foreach (QAbstractSeries *series, seriesList) { | ||||
newChart->addSeries(series); | ||||
foreach (QAbstractAxis *axis, axisList) | ||||
series->attachAxis(axis); | ||||
} | ||||
int count = 0; | ||||
foreach (QAbstractAxis *axis, axisList) { | ||||
axis->setRange(axisRanges[count].first, axisRanges[count].second); | ||||
count++; | ||||
} | ||||
newChart->setTitle(oldChart->title()); | ||||
setChart(newChart); | ||||
delete oldChart; | ||||
} | ||||
//![2] | ||||