diff options
Diffstat (limited to 'examples/charts/polarchart/chartview.cpp')
-rw-r--r-- | examples/charts/polarchart/chartview.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/examples/charts/polarchart/chartview.cpp b/examples/charts/polarchart/chartview.cpp new file mode 100644 index 00000000..038ce709 --- /dev/null +++ b/examples/charts/polarchart/chartview.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2014 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 Enterprise Charts Add-on. +** +** $QT_BEGIN_LICENSE$ +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise 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> + +QT_CHARTS_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(); + QList<QPair<qreal, qreal> > axisRanges; + + 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] |