Warning

This section contains snippets that were automatically translated from C++ to Python and may contain errors.

Zoom Line Example#

The example shows how to create your own custom zooming effect.

The example shows how to create your own custom zooming effect with QRubberBand by using a mouse and how to use touch gestures for paning and zooming.

../_images/examples_zoomlinechart1.png ../_images/examples_zoomlinechart2.png

Running the Example#

To run the example from Qt Creator, open the Welcome mode and select the example from Examples. For more information, visit Building and Running an Example.

Customizing Zooming Effects#

Let’s first create a line series with some example data.

series = QLineSeries()
for i in range(0, 500):
    p = QPointF((qreal) i, qSin(M_PI / 50 * i) * 100)
    p.ry() += QRandomGenerator.global().bounded(20)
    series << p

Then we create a custom chart view by deriving from QChartView :

class ChartView(QChartView):

We override mouse and key event handling

# protected
    viewportEvent = bool(QEvent event)
    def mousePressEvent(event):
    def mouseMoveEvent(event):
    def mouseReleaseEvent(event):
    def keyPressEvent(event):

Then we implement a custom logic for mouse and key events. For example pressing the ‘+’ key will zoom in and pressing the ‘-’ key will zoom out.

def keyPressEvent(self, event):

    switch (event.key()) {
    elif socketError == Qt.Key_Plus:
        chart().zoomIn()
        break
    elif socketError == Qt.Key_Minus:
        chart().zoomOut()
        break

We also create our own QChart :

class Chart(QChart):

Where we can handle the gestures:

def sceneEvent(self, QEvent event):

    if event.type() == QEvent.Gesture:
        return gestureEvent(QGestureEvent(event))
    return QChart.event(event)

def gestureEvent(self, QGestureEvent event):

    if QGesture gesture = event.gesture(Qt.PanGesture):
        pan = QPanGesture(gesture)
        QChart.scroll(-(pan.delta().x()), pan.delta().y())

    if QGesture gesture = event.gesture(Qt.PinchGesture):
        pinch = QPinchGesture(gesture)
        if pinch.changeFlags()  QPinchGesture.ScaleFactorChanged:
            QChart.zoom(pinch.scaleFactor())

    return True

Note that you will need to call grabGesture() to both QMainWindow and QChart .

Example project @ code.qt.io