Beispiel für eine Zoom-Linie
Das Beispiel zeigt, wie Sie Ihren eigenen benutzerdefinierten Zoomeffekt erstellen können.
Das Beispiel zeigt, wie Sie mit „ QRubberBand “ mithilfe der Maus einen eigenen benutzerdefinierten Zoomeffekt erstellen und wie Sie Touch-Gesten zum Schwenken und Zoomen verwenden können.


Ausführen des Beispiels
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den „ Welcome “-Modus und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ aus dem Verzeichnis „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
Anpassen von Zoomeffekten
Erstellen wir zunächst eine Linienreihe mit einigen Beispieldaten.
auto series = new QLineSeries;
for (int i = 0; i < 500; i++) {
QPointF p((qreal) i, qSin(M_PI / 50 * i) * 100);
p.ry() += QRandomGenerator::global()->bounded(20);
*series << p;
}Anschließend erstellen wir eine benutzerdefinierte Diagrammansicht, indem wir von `QChartView` ableiten:
class ChartView : public QChartViewWir überschreiben die Behandlung von Maus- und Tastenereignissen
protected:
bool viewportEvent(QEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event);Anschließend implementieren wir eine benutzerdefinierte Logik für Maus- und Tastenereignisse. So wird beispielsweise durch Drücken der Taste „+“ vergrößert und durch Drücken der Taste „-“ verkleinert.
void ChartView::keyPressEvent(QKeyEvent *event)
{
switch (event->key()) {
case Qt::Key_Plus:
chart()->zoomIn();
break;
case Qt::Key_Minus:
chart()->zoomOut();
break;Außerdem erstellen wir unser eigenes QChart:
class Chart : public QChartDort können wir die Gesten verarbeiten:
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;
}Beachte, dass du `grabGesture()` sowohl für ` QMainWindow ` als auch für `QChart` aufrufen musst.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.