diff options
Diffstat (limited to 'examples/charts/callout/view.cpp')
-rw-r--r-- | examples/charts/callout/view.cpp | 123 |
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(); + } +} |