chartview.cpp
111 lines
| 2.9 KiB
| text/x-c
|
CppLexer
|
r2483 | /**************************************************************************** | ||
** | ||||
** Copyright (C) 2013 Digia Plc | ||||
** All rights reserved. | ||||
** For any questions to Digia, please use contact form at http://qt.digia.com | ||||
** | ||||
** This file is part of the Qt Commercial Charts Add-on. | ||||
** | ||||
** $QT_BEGIN_LICENSE$ | ||||
** Licensees holding valid Qt Commercial licenses may use this file in | ||||
** accordance with the Qt Commercial License Agreement provided with the | ||||
** Software or, alternatively, in accordance with the terms contained in | ||||
** a written agreement between you and Digia. | ||||
** | ||||
** If you have questions regarding the use of this file, please use | ||||
** contact form at http://qt.digia.com | ||||
** $QT_END_LICENSE$ | ||||
** | ||||
****************************************************************************/ | ||||
#include "chartview.h" | ||||
#include <QMouseEvent> | ||||
#include <QDebug> | ||||
#include <QAbstractAxis> | ||||
#include <QValueAxis> | ||||
QTCOMMERCIALCHART_USE_NAMESPACE | ||||
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(); | ||||
|
r2485 | QList<QPair<qreal, qreal> > axisRanges; | ||
|
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] | ||||