Sur cette page

QScroller Class

La classe QScroller permet de mettre en place un défilement cinétique pour n'importe quel widget de défilement ou élément graphique. En savoir plus...

En-tête : #include <QScroller>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite de : QObject

Types publics

enum Input { InputPress, InputMove, InputRelease }
enum ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture }
enum State { Inactive, Pressed, Dragging, Scrolling }

Propriétés

Fonctions publiques

QPointF finalPosition() const
bool handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
QPointF pixelPerMeter() const
QScrollerProperties scrollerProperties() const
void setSnapPositionsX(const QList<qreal> &positions)
void setSnapPositionsX(qreal first, qreal interval)
void setSnapPositionsY(const QList<qreal> &positions)
void setSnapPositionsY(qreal first, qreal interval)
QScroller::State state() const
void stop()
QObject *target() const
QPointF velocity() const

Emplacements publics

void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
void resendPrepareEvent()
void scrollTo(const QPointF &pos)
void scrollTo(const QPointF &pos, int scrollTime)
void setScrollerProperties(const QScrollerProperties &prop)

Signaux

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)
void stateChanged(QScroller::State newState)

Membres publics statiques

QList<QScroller *> activeScrollers()
Qt::GestureType grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
Qt::GestureType grabbedGesture(QObject *target)
bool hasScroller(QObject *target)
QScroller *scroller(QObject *target)
const QScroller *scroller(const QObject *target)
void ungrabGesture(QObject *target)

Description détaillée

Avec le défilement cinétique, l'utilisateur peut pousser le widget dans une direction donnée et celui-ci continuera à défiler dans cette direction jusqu'à ce qu'il soit arrêté soit par l'utilisateur, soit par la friction. Les paramètres d'inertie, de friction et d'autres concepts physiques peuvent être modifiés afin d'affiner une expérience utilisateur intuitive.

L'objet QScroller est celui qui stocke la position actuelle et la vitesse de défilement, et se charge des mises à jour. QScroller peut être déclenché par un geste de balayage

    QWidget *w = ...;
    QScroller::grabGesture(w, QScroller::LeftMouseButtonGesture);

ou directement comme suit :

    QWidget *w = ...;
    QScroller *scroller = QScroller::scroller(w);
    scroller->scrollTo(QPointF(100, 100));

Les QObjects faisant l’objet du défilement reçoivent un événement « QScrollPrepareEvent » chaque fois que le défilement doit mettre à jour ses informations géométriques, et un événement « QScrollEvent » chaque fois que le contenu de l’objet doit effectivement être défilé.

Le défilement utilise le minuteur global ` QAbstractAnimation ` pour générer ses événements `QScrollEvent`. Ce comportement peut être modifié via ` QScrollerProperties::FrameRate ` pour chaque instance de `QScroller`.

Même si ce défilement cinétique propose un grand nombre de paramètres accessibles via ` QScrollerProperties`, nous vous recommandons de conserver leurs valeurs par défaut, optimisées pour la plateforme. Avant de les modifier, vous pouvez tester l’exemple ` plot ` situé dans le répertoire d’exemples ` scroller `.

Voir également QScrollEvent, QScrollPrepareEvent et QScrollerProperties.

Documentation sur les types de membres

enum QScroller::Input

Cette énumération propose une vue indépendante du périphérique d'entrée des événements d'entrée pertinents pour QScroller.

ConstanteValeurDescription
QScroller::InputPress1L'utilisateur a appuyé sur le périphérique d'entrée (par exemple : QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin)
QScroller::InputMove2L'utilisateur a déplacé le périphérique de saisie (par exemple : QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate)
QScroller::InputRelease3L'utilisateur a relâché le périphérique d'entrée (par exemple : QEvent::MouseButtonRelease, QEvent::GraphicsSceneMouseRelease, QEvent::TouchEnd)

enum QScroller::ScrollerGestureType

Cette énumération contient les différents types de gestes pris en charge par le système de reconnaissance gestuelle « QScroller ».

ConstanteValeurDescription
QScroller::TouchGesture0Le système de reconnaissance des gestes ne se déclenche qu'en cas d'événements tactiles. Plus précisément, il réagit à un seul point de contact lorsqu'un écran tactile est utilisé, et à deux points de contact lorsqu'un pavé tactile est utilisé.
QScroller::LeftMouseButtonGesture1Le système de reconnaissance des gestes ne se déclenchera qu'en cas d'événements liés au bouton gauche de la souris.
QScroller::MiddleMouseButtonGesture3Le système de reconnaissance des gestes ne se déclenche que lors d'événements du bouton central de la souris.
QScroller::RightMouseButtonGesture2Le système de reconnaissance des gestes ne se déclenche que lors d'événements liés au bouton droit de la souris.

enum QScroller::State

Cette énumération contient les différents états d'QScroller.

ConstanteValeurDescription
QScroller::Inactive0La zone de défilement ne défile pas et aucune touche n'est enfoncée.
QScroller::Pressed1Un événement tactile a été détecté ou un bouton de la souris a été enfoncé, mais la zone de défilement n'est pas en cours de déplacement.
QScroller::Dragging2La zone de défilement suit actuellement le point de contact ou la souris.
QScroller::Scrolling3La zone de défilement se déplace d'elle-même.

Documentation des propriétés

scrollerProperties : QScrollerProperties

Cette propriété contient les propriétés de défilement de ce scroller. Ces propriétés sont utilisées par l'QScroller e pour déterminer son comportement de défilement.

Fonctions d'accès :

QScrollerProperties scrollerProperties() const
void setScrollerProperties(const QScrollerProperties &prop)

Signal de notification :

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)

[read-only] state : State

Cette propriété contient l'état du défilement

Fonctions d'accès :

QScroller::State state() const

Signal de notification :

void stateChanged(QScroller::State newState)

Voir aussi QScroller::State.

Documentation des fonctions membres

[static] QList<QScroller *> QScroller::activeScrollers()

Renvoie une liste, à l'échelle de l'application, des objets ` QScroller ` actuellement actifs. Les objets ` QScroller ` actifs se trouvent dans un ` state()` qui n'est pas ` QScroller::Inactive`. Cette fonction est utile lorsque vous développez votre propre système de reconnaissance des gestes.

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)

Le défilement démarre de manière à ce que le rectangle rect soit visible dans la fenêtre d'affichage, avec des marges supplémentaires spécifiées en pixels par xmargin et ymargin autour du rectangle.

Dans les cas où il n’est pas possible de faire tenir le rectangle et ses marges à l’intérieur de la fenêtre d’affichage, le contenu est défilé de manière à ce que le plus possible de contenu soit visible à partir de rect.

La vitesse de défilement est calculée de manière à ce que la position donnée soit atteinte après un délai défini par la plateforme.

Cette fonction effectue le défilement proprement dit en appelant scrollTo().

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::ensureVisible));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QRectF &rect, qreal xmargin, qreal ymargin) { receiver->ensureVisible(rect, xmargin, ymargin); });
Pour plus d’exemples et d’approches, voir la section « Connexion à des slots surchargés ».

Voir également scrollTo().

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)

Cette version atteindra sa position de destination en scrollTime millisecondes.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::ensureVisible));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime) { receiver->ensureVisible(rect, xmargin, ymargin, scrollTime); });
Pour plus d’exemples et d’approches, consultez la section « Connexion à des slots surchargés ».

QPointF QScroller::finalPosition() const

Renvoie la position finale estimée pour le mouvement de défilement en cours. Renvoie la position actuelle si l'état du défilement n'est pas « Scrolling ». Le résultat est indéfini lorsque l'état du défilement est « Inactive ».

La position cible est exprimée en pixels.

Voir également pixelPerMeter() et scrollTo().

[static] Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)

Enregistre un détecteur de geste de défilement personnalisé, l'associe à l'target et renvoie le type de geste obtenu. Si le paramètre « scrollGestureType » est défini sur « TouchGesture », le geste se déclenche lors d'événements tactiles. S'il est défini sur l'une des valeurs suivantes : « LeftMouseButtonGesture », « RightMouseButtonGesture » ou « MiddleMouseButtonGesture », il se déclenche lors d'événements de souris sur le bouton correspondant.

Un seul geste de défilement peut être actif à la fois sur un même objet. Si vous appelez cette fonction deux fois sur le même objet, elle annulera le geste existant avant d’en activer un nouveau.

Remarque : pour éviter tout effet indésirable, les événements de souris sont traités pendant que le geste est déclenché. Comme l’événement initial de clic de souris n’est pas traité, le geste envoie un faux événement de relâchement de souris à la position globale (INT_MIN, INT_MIN). Cela garantit la cohérence des états internes du widget ayant reçu le clic de souris d’origine.

Voir également ungrabGesture() et grabbedGesture().

[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)

Renvoie le type de geste actuellement capturé pour l'target, ou 0 si aucun geste n'est capturé.

Voir aussi grabGesture() et ungrabGesture().

bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)

Cette fonction est utilisée par les systèmes de reconnaissance gestuelle pour signaler au scroller un nouvel événement d’entrée. Le scroller modifie son « state() » interne en fonction de l’événement d’entrée et des propriétés qui lui sont associées. Le scroller ne fait aucune distinction quant au type de périphérique d’entrée à l’origine de l’événement. Par conséquent, l’événement doit être décomposé en un type « input », un « position » et une « timestamp » exprimée en millisecondes. La « position » doit être exprimée dans le système de coordonnées de la cible.

La valeur renvoyée est « true » si l’événement doit être traité par le filtre appelant, ou « false » s’il doit être transmis au contrôle.

Remarque : l’utilisation de ` grabGesture()` devrait suffire dans la plupart des cas d’utilisation.

[static] bool QScroller::hasScroller(QObject *target)

Renvoie « true » si un objet « QScroller » a déjà été créé pour « target » ; « false » dans le cas contraire.

Voir aussi scroller().

QPointF QScroller::pixelPerMeter() const

Renvoie la mesure « pixels par mètre » pour le widget défilant.

La valeur est indiquée séparément pour les axes x et y à l'aide d'un QPointF.

Remarque : veuillez noter que cette valeur doit être physiquement correcte. Les paramètres DPI réels que Qt renvoie pour l'affichage peuvent être rapportés de manière erronée à dessein par le système de fenêtrage sous-jacent, par exemple sous macOS.

[slot] void QScroller::resendPrepareEvent()

Cette fonction renvoie l'événement « QScrollPrepareEvent ». L'appel de la fonction `resendPrepareEvent` déclenche un événement « QScrollPrepareEvent » depuis le défilement. Cela permet au récepteur de redéfinir la position et la taille du contenu pendant le défilement. L'appel de cette fonction lorsque l'élément est à l'état « Inactive » est inutile, car l'événement « prepare » est renvoyé avant le début du défilement.

[slot] void QScroller::scrollTo(const QPointF &pos)

Lance le défilement du widget de manière à ce que le point pos se trouve en haut à gauche de la fenêtre d'affichage.

Le comportement en cas de défilement en dehors de la zone de défilement valide n'est pas défini. Dans ce cas, le défilement peut ou non dépasser la limite.

La vitesse de défilement sera calculée de manière à ce que la position indiquée soit atteinte après un laps de temps défini par la plateforme.

pos est exprimée en coordonnées de la fenêtre d'affichage.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::scrollTo));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QPointF &pos) { receiver->scrollTo(pos); });
Pour plus d’exemples et d’approches, voir la connexion aux slots surchargés.

Voir également ensureVisible().

[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)

Cette version atteindra sa position de destination en scrollTime s de millisecondes.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        scroller, qOverload(&QScroller::scrollTo));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        scroller, [receiver = scroller](const QPointF &pos, int scrollTime) { receiver->scrollTo(pos, scrollTime); });
Pour plus d’exemples et d’approches, consultez la section « Connexion à des slots surchargés ».

[static] QScroller *QScroller::scroller(QObject *target)

Renvoie le scroller associé à l'target donné. Tant que l'objet existe, cette fonction renverra toujours la même instance de QScroller. Si aucun QScroller n'existe pour l'target, il en sera implicitement créé un. À aucun moment, il n'y aura plus d'un QScroller actif sur un objet.

Voir également hasScroller() et target().

[static] const QScroller *QScroller::scroller(const QObject *target)

Il s'agit de la version « const » de la fonction scroller().

Il s'agit d'une fonction surchargée.

[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)

QScroller émet ce signal chaque fois que les propriétés de son défilement changent. newProperties correspondent aux nouvelles propriétés du défilement.

Remarque : signalde notification pour la propriété scrollerProperties.

Voir également scrollerProperties.

void QScroller::setSnapPositionsX(const QList<qreal> &positions)

Définissez les positions d'alignement de l'axe horizontal à l'aide d'une liste de valeurs de type ` positions`. Cela remplace toutes les positions d'alignement précédemment définies, ainsi que l'intervalle d'alignement précédemment défini. L'alignement peut être désactivé en définissant une liste vide de positions.

void QScroller::setSnapPositionsX(qreal first, qreal interval)

Définissez les positions d'accrochage de l'axe horizontal à des intervalles réguliers. La première position d'accrochage se trouve à first. La suivante à first + interval. Cela permet de créer un en-tête de liste. Cette opération remplace toutes les positions d'accrochage précédemment définies, ainsi que l'intervalle d'accrochage précédemment défini. L'accrochage peut être désactivé en définissant un intervalle de 0,0.

void QScroller::setSnapPositionsY(const QList<qreal> &positions)

Définissez les positions d'accrochage de l'axe vertical en spécifiant une liste de positions positions. Cela remplace toutes les positions d'accrochage définies précédemment, ainsi que l'intervalle d'accrochage éventuellement défini auparavant. L'accrochage peut être désactivé en définissant une liste vide de positions.

void QScroller::setSnapPositionsY(qreal first, qreal interval)

Définissez les positions d'accrochage de l'axe vertical à des intervalles réguliers. La première position d'accrochage se trouve à first. La suivante à first + interval. Cela remplace toutes les positions d'accrochage définies précédemment, ainsi que l'intervalle d'accrochage précédemment défini. L'accrochage peut être désactivé en définissant un intervalle de 0,0.

[signal] void QScroller::stateChanged(QScroller::State newState)

QScroller émet ce signal chaque fois que l'état change. newState correspond au nouvel état.

Remarque : signalNotifier pour la propriété state.

Voir également state.

void QScroller::stop()

Arrête le défilement et rétablit son état à « Inactif ».

QObject *QScroller::target() const

Renvoie l'objet cible de ce défilement.

Voir également hasScroller() et scroller().

[static] void QScroller::ungrabGesture(QObject *target)

Libère le geste pour l'target. Ne fait rien si aucun geste n'est capturé.

Voir également grabGesture() et grabbedGesture().

QPointF QScroller::velocity() const

Renvoie la vitesse de défilement actuelle en mètres par seconde lorsque l'état est « Scrolling » (Défilement) ou « Dragging » (Glissement). Dans le cas contraire, renvoie une vitesse égale à zéro.

La vitesse est indiquée séparément pour les axes x et y à l'aide de la fonction ` QPointF`.

Voir également pixelPerMeter().

© 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.