summaryrefslogtreecommitdiffstats
path: root/examples/charts/chartinteractions
diff options
context:
space:
mode:
authorTitta Heikkala <titta.heikkala@digia.com>2014-07-01 07:10:00 +0300
committerTitta Heikkala <titta.heikkala@theqtcompany.com>2014-10-14 13:04:52 +0300
commitc544258484ff4fd5d2b88402fbaa5d154b89a3a2 (patch)
tree7659625abb566dec55d3783ed820b928542d9b2b /examples/charts/chartinteractions
parent76339f714f088645e911cee65bdb66055fe029aa (diff)
Qt Charts project file structure change
Charts repository structure is changed to follow the structure of a Qt Add-On module. The task includes following changes: - All macros and definitions named 'commercial' have been renamed. - Compile errors related to QString and qSort usage have been fixed. - Old demos are moved under examples. The QML examples now support only Qt Quick 2.0, the support for Qt Quick 1 is removed. - The QML examples with multiple views are updated so that they are usable also with touch devices. - Unnecessary version checks are removed from examples. - The build stamp has been removed as it was only meant for Charts development purposes and it's no longer needed. Also development build related debug prints are removed as __DATE__ can't be used for all OS thus it doesn't make much sense. - Documentation structure has been updated based on the new module structure. The raw HTML files have been removed. Demos are combined to examples. - Unnecessary .qdocinc files are no longer needed. The content is moved to the corresponding .cpp files. - The Charts widget designer plugin is updated according to the module change. - The test cases updated according to the project structure change. Tests are added also for version 2.0. - cmake modules generation is not needed with Qt 5.4 and Qt Charts so it's disabled. - The new module name and version are updated to the plugin.qmltypes file. Task-number: QTRD-2844, QTRD-3217, QTRD-3218, QTRD-3277, QTRD-3228, QTRD-2526, QTRD-3233, QTRD-3222 Change-Id: Ib7fb26057cde710ffaf6bc780c8bf52a16f45160 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>
Diffstat (limited to 'examples/charts/chartinteractions')
-rw-r--r--examples/charts/chartinteractions/chart.cpp101
-rw-r--r--examples/charts/chartinteractions/chart.h53
-rw-r--r--examples/charts/chartinteractions/chartinteractions.pro11
-rw-r--r--examples/charts/chartinteractions/chartview.cpp50
-rw-r--r--examples/charts/chartinteractions/chartview.h45
-rw-r--r--examples/charts/chartinteractions/main.cpp74
6 files changed, 334 insertions, 0 deletions
diff --git a/examples/charts/chartinteractions/chart.cpp b/examples/charts/chartinteractions/chart.cpp
new file mode 100644
index 00000000..8aa2a443
--- /dev/null
+++ b/examples/charts/chartinteractions/chart.cpp
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** 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 "chart.h"
+#include <QValueAxis>
+#include <QAbstractAxis>
+#include <qmath.h>
+
+Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags, QLineSeries *series)
+ : QChart(QChart::ChartTypeCartesian, parent, wFlags), m_series(series)
+{
+ m_clicked = false;
+}
+
+Chart::~Chart()
+{
+}
+
+void Chart::clickPoint(const QPointF &point)
+{
+ // Find the closes data point
+ m_movingPoint = QPoint();
+ m_clicked = false;
+ foreach (QPointF p, m_series->points()) {
+ if (distance(p, point) < distance(m_movingPoint, point)) {
+ m_movingPoint = p;
+ m_clicked = true;
+ }
+ }
+}
+
+qreal Chart::distance(const QPointF &p1, const QPointF &p2)
+{
+ return qSqrt((p1.x() - p2.x()) * (p1.x() - p2.x())
+ + (p1.y() - p2.y()) * (p1.y() - p2.y()));
+}
+
+void Chart::setPointClicked(bool clicked)
+{
+ m_clicked = clicked;
+}
+
+void Chart::handlePointMove(const QPoint &point)
+{
+ if (m_clicked) {
+ //Map the point clicked from the ChartView
+ //to the area occupied by the chart.
+ QPoint mappedPoint = point;
+ mappedPoint.setX(point.x() - this->plotArea().x());
+ mappedPoint.setY(point.y() - this->plotArea().y());
+
+ //Get the x- and y axis to be able to convert the mapped
+ //coordinate point to the charts scale.
+ QAbstractAxis *axisx = this->axisX();
+ QValueAxis *haxis = 0;
+ if (axisx->type() == QAbstractAxis::AxisTypeValue)
+ haxis = qobject_cast<QValueAxis *>(axisx);
+
+ QAbstractAxis *axisy = this->axisY();
+ QValueAxis *vaxis = 0;
+ if (axisy->type() == QAbstractAxis::AxisTypeValue)
+ vaxis = qobject_cast<QValueAxis *>(axisy);
+
+ if (haxis && vaxis) {
+ //Calculate the "unit" between points on the x
+ //y axis.
+ double xUnit = this->plotArea().width() / haxis->max();
+ double yUnit = this->plotArea().height() / vaxis->max();
+
+ //Convert the mappedPoint to the actual chart scale.
+ double x = mappedPoint.x() / xUnit;
+ double y = vaxis->max() - mappedPoint.y() / yUnit;
+
+ //Replace the old point with the new one.
+ m_series->replace(m_movingPoint, QPointF(x, y));
+
+ //Update the m_movingPoint so we are able to
+ //do the replace also during mousemoveEvent.
+ m_movingPoint.setX(x);
+ m_movingPoint.setY(y);
+ }
+ }
+}
+
diff --git a/examples/charts/chartinteractions/chart.h b/examples/charts/chartinteractions/chart.h
new file mode 100644
index 00000000..9a10387b
--- /dev/null
+++ b/examples/charts/chartinteractions/chart.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef CHART_H
+#define CHART_H
+
+#include <QChart>
+#include <QLineSeries>
+
+QT_CHARTS_USE_NAMESPACE
+
+class Chart : public QChart
+{
+ Q_OBJECT
+public:
+ explicit Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0, QLineSeries *series = 0);
+ ~Chart();
+
+public slots:
+ void clickPoint(const QPointF &point);
+
+public:
+ void handlePointMove(const QPoint &point);
+ void setPointClicked(bool clicked);
+
+private:
+ qreal distance(const QPointF &p1, const QPointF &p2);
+ QLineSeries *m_series;
+ QPointF m_movingPoint;
+
+ //Boolean value to determine if an actual point in the
+ //series is clicked.
+ bool m_clicked;
+};
+
+#endif // CHART_H
diff --git a/examples/charts/chartinteractions/chartinteractions.pro b/examples/charts/chartinteractions/chartinteractions.pro
new file mode 100644
index 00000000..8cf4c36c
--- /dev/null
+++ b/examples/charts/chartinteractions/chartinteractions.pro
@@ -0,0 +1,11 @@
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+QT += core gui
+
+TARGET = chartinteractions
+TEMPLATE = app
+
+HEADERS += chart.h chartview.h
+SOURCES += main.cpp chart.cpp chartview.cpp
diff --git a/examples/charts/chartinteractions/chartview.cpp b/examples/charts/chartinteractions/chartview.cpp
new file mode 100644
index 00000000..95fae6cd
--- /dev/null
+++ b/examples/charts/chartinteractions/chartview.cpp
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** 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 "chart.h"
+
+ChartView::ChartView(Chart *chart, QWidget *parent) :
+ QChartView(chart, parent)
+{
+ m_chart = chart;
+}
+
+void ChartView::mousePressEvent(QMouseEvent *event)
+{
+ m_mousePos = event->pos();
+ QChartView::mousePressEvent(event);
+}
+
+void ChartView::mouseMoveEvent(QMouseEvent *event)
+{
+ m_chart->handlePointMove(event->pos());
+ QChartView::mouseMoveEvent(event);
+}
+
+void ChartView::mouseReleaseEvent(QMouseEvent *event)
+{
+ if (event->pos() != m_mousePos) {
+ m_chart->handlePointMove(event->pos());
+ m_chart->setPointClicked(false);
+ }
+ QChartView::mouseReleaseEvent(event);
+}
diff --git a/examples/charts/chartinteractions/chartview.h b/examples/charts/chartinteractions/chartview.h
new file mode 100644
index 00000000..931feee0
--- /dev/null
+++ b/examples/charts/chartinteractions/chartview.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef CHARTVIEW_H
+#define CHARTVIEW_H
+
+#include <QChartView>
+
+class Chart;
+
+QT_CHARTS_USE_NAMESPACE
+
+class ChartView : public QChartView
+{
+public:
+ ChartView(Chart *chart, QWidget *parent = 0);
+
+protected:
+ void mousePressEvent(QMouseEvent *event);
+ void mouseMoveEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
+
+private:
+ Chart *m_chart;
+ QPoint m_mousePos;
+};
+
+#endif
diff --git a/examples/charts/chartinteractions/main.cpp b/examples/charts/chartinteractions/main.cpp
new file mode 100644
index 00000000..67cfb800
--- /dev/null
+++ b/examples/charts/chartinteractions/main.cpp
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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 <QApplication>
+#include <QMainWindow>
+#include <QLineSeries>
+
+#include <QValueAxis>
+
+#include "chart.h"
+#include "chartview.h"
+
+QT_CHARTS_USE_NAMESPACE
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ QLineSeries *series = new QLineSeries();
+
+ series->append(0, 6);
+ series->append(1, 3);
+ series->append(2, 4);
+ series->append(3, 8);
+ series->append(7, 13);
+ series->append(10, 5);
+ *series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);
+
+ Chart *chart = new Chart(0, 0, series);
+ chart->legend()->hide();
+ chart->addSeries(series);
+ QPen p = series->pen();
+ p.setWidth(5);
+ series->setPen(p);
+ chart->createDefaultAxes();
+ chart->setTitle("Drag'n drop to move data points");
+
+ QValueAxis *axisX = new QValueAxis();
+ chart->setAxisX(axisX, series);
+ axisX->setRange(0, 20);
+
+ QValueAxis *axisY = new QValueAxis();
+ chart->setAxisY(axisY, series);
+ axisY->setRange(0, 13);
+
+ QObject::connect(series, SIGNAL(clicked(QPointF)), chart, SLOT(clickPoint(QPointF)));
+
+ ChartView *chartView = new ChartView(chart);
+ chartView->setRenderHint(QPainter::Antialiasing);
+
+ QMainWindow window;
+ window.setCentralWidget(chartView);
+ window.resize(400, 300);
+ window.show();
+
+ return a.exec();
+}