Exemple de ligne de zoom
L'exemple montre comment créer votre propre effet de zoom personnalisé.
L'exemple montre comment créer votre propre effet de zoom personnalisé avec QRubberBand en utilisant une souris et comment utiliser des gestes tactiles pour le panoramique et le zoom.


Exécution de l'exemple
Pour exécuter l'exemple à partir de Qt Creatorouvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutoriel : Construire et exécuter.
Personnalisation des effets de zoom
Commençons par créer une série de lignes avec quelques données d'exemple.
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; }
Ensuite, nous créons une vue graphique personnalisée en dérivant de QChartView:
class ChartView : public QChartView
Nous surchargeons la gestion des événements souris et touches
protected: bool viewportEvent(QEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void keyPressEvent(QKeyEvent *event);
Nous implémentons ensuite une logique personnalisée pour les événements souris et touches. Par exemple, une pression sur la touche "+" permet d'effectuer un zoom avant et une pression sur la touche "-" permet d'effectuer un zoom arrière.
void ChartView::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Plus: chart()->zoomIn(); break; case Qt::Key_Minus: chart()->zoomOut(); break;
Nous créons également notre propre site QChart:
class Chart : public QChart
où nous pouvons gérer les gestes :
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; }
Notez que vous devrez appeler grabGesture() à la fois à QMainWindow et à QChart.
© 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.