summaryrefslogtreecommitdiffstats
path: root/examples/charts/callout/view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/charts/callout/view.cpp')
-rw-r--r--examples/charts/callout/view.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/examples/charts/callout/view.cpp b/examples/charts/callout/view.cpp
new file mode 100644
index 00000000..a7c43863
--- /dev/null
+++ b/examples/charts/callout/view.cpp
@@ -0,0 +1,123 @@
+/****************************************************************************
+ **
+ ** 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 "view.h"
+#include <QResizeEvent>
+#include <QGraphicsScene>
+#include <QChart>
+#include <QLineSeries>
+#include <QSplineSeries>
+#include <QGraphicsTextItem>
+#include "callout.h"
+#include <QMouseEvent>
+
+View::View(QWidget *parent)
+ : QGraphicsView(new QGraphicsScene, parent),
+ m_coordX(0),
+ m_coordY(0),
+ m_chart(0),
+ m_tooltip(0)
+{
+ setDragMode(QGraphicsView::NoDrag);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+ // chart
+ m_chart = new QChart;
+ m_chart->setMinimumSize(640, 480);
+ m_chart->setTitle("Hover the line to show callout. Click the line to make it stay");
+ m_chart->legend()->hide();
+ QLineSeries *series = new QLineSeries;
+ series->append(1, 3);
+ series->append(4, 5);
+ series->append(5, 4.5);
+ series->append(7, 1);
+ series->append(11, 2);
+ m_chart->addSeries(series);
+
+ QSplineSeries *series2 = new QSplineSeries;
+ series2->append(1.6, 1.4);
+ series2->append(2.4, 3.5);
+ series2->append(3.7, 2.5);
+ series2->append(7, 4);
+ series2->append(10, 2);
+ m_chart->addSeries(series2);
+
+ m_chart->createDefaultAxes();
+ m_chart->setAcceptHoverEvents(true);
+
+ setRenderHint(QPainter::Antialiasing);
+ scene()->addItem(m_chart);
+
+ m_coordX = new QGraphicsSimpleTextItem(m_chart);
+ m_coordX->setPos(m_chart->size().width()/2 - 50, m_chart->size().height());
+ m_coordX->setText("X: ");
+ m_coordY = new QGraphicsSimpleTextItem(m_chart);
+ m_coordY->setPos(m_chart->size().width()/2 + 50, m_chart->size().height());
+ m_coordY->setText("Y: ");
+
+ connect(series, SIGNAL(clicked(QPointF)), this, SLOT(keepCallout()));
+ connect(series, SIGNAL(hovered(QPointF, bool)), this, SLOT(tooltip(QPointF,bool)));
+
+ connect(series2, SIGNAL(clicked(QPointF)), this, SLOT(keepCallout()));
+ connect(series2, SIGNAL(hovered(QPointF, bool)), this, SLOT(tooltip(QPointF,bool)));
+
+ this->setMouseTracking(true);
+}
+
+void View::resizeEvent(QResizeEvent *event)
+{
+ if (scene()) {
+ scene()->setSceneRect(QRect(QPoint(0, 0), event->size()));
+ m_chart->resize(event->size());
+ m_coordX->setPos(m_chart->size().width()/2 - 50, m_chart->size().height() - 20);
+ m_coordY->setPos(m_chart->size().width()/2 + 50, m_chart->size().height() - 20);
+ }
+ QGraphicsView::resizeEvent(event);
+}
+
+void View::mouseMoveEvent(QMouseEvent *event)
+{
+ m_coordX->setText(QString("X: %1").arg(m_chart->mapToValue(event->pos()).x()));
+ m_coordY->setText(QString("Y: %1").arg(m_chart->mapToValue(event->pos()).y()));
+ QGraphicsView::mouseMoveEvent(event);
+}
+
+void View::keepCallout()
+{
+ m_tooltip = new Callout(m_chart);
+}
+
+void View::tooltip(QPointF point, bool state)
+{
+ if (m_tooltip == 0)
+ m_tooltip = new Callout(m_chart);
+
+ if (state) {
+ m_tooltip->setText(QString("X: %1 \nY: %2 ").arg(point.x()).arg(point.y()));
+ QXYSeries *series = qobject_cast<QXYSeries *>(sender());
+ m_tooltip->setAnchor(m_chart->mapToPosition(point, series));
+ m_tooltip->setPos(m_chart->mapToPosition(point, series) + QPoint(10, -50));
+ m_tooltip->setZValue(11);
+ m_tooltip->show();
+ } else {
+ m_tooltip->hide();
+ }
+}