/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd ** All rights reserved. ** For any questions to The Qt Company, please use contact form at http://qt.io ** ** This file is part of the Qt Charts module. ** ** 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 ** agreement between you and The Qt Company. ** ** If you have questions regarding the use of this file, please use ** contact form at http://qt.io ** ****************************************************************************/ #include "chartview.h" #include #include #include #include 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 seriesList = oldChart->series(); QList axisList = oldChart->axes(); QList > axisRanges; foreach (QAbstractAxis *axis, axisList) { QValueAxis *valueAxis = static_cast(axis); axisRanges.append(QPair(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]