43 lines
1.2 KiB
C++
43 lines
1.2 KiB
C++
|
// Copyright (C) 2023 The Qt Company Ltd.
|
||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||
|
|
||
|
#include "chart.h"
|
||
|
|
||
|
#include <QGesture>
|
||
|
#include <QGraphicsScene>
|
||
|
#include <QGraphicsView>
|
||
|
|
||
|
Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags)
|
||
|
: QChart(QChart::ChartTypeCartesian, parent, wFlags)
|
||
|
{
|
||
|
// Seems that QGraphicsView (QChartView) does not grab gestures.
|
||
|
// They can only be grabbed here in the QGraphicsWidget (QChart).
|
||
|
grabGesture(Qt::PanGesture);
|
||
|
grabGesture(Qt::PinchGesture);
|
||
|
}
|
||
|
|
||
|
//![1]
|
||
|
bool Chart::sceneEvent(QEvent *event)
|
||
|
{
|
||
|
if (event->type() == QEvent::Gesture)
|
||
|
return gestureEvent(static_cast<QGestureEvent *>(event));
|
||
|
return QChart::event(event);
|
||
|
}
|
||
|
|
||
|
bool Chart::gestureEvent(QGestureEvent *event)
|
||
|
{
|
||
|
if (QGesture *gesture = event->gesture(Qt::PanGesture)) {
|
||
|
auto pan = static_cast<QPanGesture *>(gesture);
|
||
|
QChart::scroll(-(pan->delta().x()), pan->delta().y());
|
||
|
}
|
||
|
|
||
|
if (QGesture *gesture = event->gesture(Qt::PinchGesture)) {
|
||
|
auto pinch = static_cast<QPinchGesture *>(gesture);
|
||
|
if (pinch->changeFlags() & QPinchGesture::ScaleFactorChanged)
|
||
|
QChart::zoom(pinch->scaleFactor());
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
//![1]
|