/**************************************************************************** ** ** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, 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 Digia. ** ** If you have questions regarding the use of this file, please use ** contact form at http://qt.io ** ****************************************************************************/ #include "view.h" #include #include #include #include #include #include #include "callout.h" #include 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(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(); } }