#include "widget.h" #include #include #include #include #include #include #include #include #include "callout.h" QTCOMMERCIALCHART_USE_NAMESPACE Widget::Widget(QWidget *parent) : QWidget(parent), m_scene(0), m_chart(0), m_view(0), m_tooltip(0) { // 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_scene = new QGraphicsScene; m_view = new QGraphicsView(m_scene); m_view->setRenderHint(QPainter::Antialiasing); m_scene->addItem(m_chart); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(m_view); setLayout(mainLayout); 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))); } Widget::~Widget() { } void Widget::keepCallout() { m_tooltip = new Callout(m_chart); } void Widget::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())); m_tooltip->setAnchor(m_chart->mapFromParent(m_view->mapToScene(m_view->mapFromGlobal(QCursor::pos())))); m_tooltip->setPos(m_chart->mapFromParent(m_view->mapToScene(m_view->mapFromGlobal(QCursor::pos() + QPoint(10, -50))))); m_tooltip->setZValue(11); m_tooltip->show(); } else { m_tooltip->hide(); } }