Sur cette page

QScroller Class

La classe QScroller permet un défilement cinétique pour n'importe quel widget de défilement ou élément graphique. Plus d'informations...

En-tête : #include <QScroller>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Héritages : 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é par l'utilisateur ou par la friction. Les aspects d'inertie, de friction et d'autres concepts physiques peuvent être modifiés afin d'affiner l'expérience intuitive de l'utilisateur.

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

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

ou directement comme ceci :

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

Les QObjects défilés reçoivent un QScrollPrepareEvent chaque fois que le défileur doit mettre à jour ses informations géométriques et un QScrollEvent chaque fois que le contenu de l'objet doit effectivement être défilé.

Le défileur utilise la minuterie globale QAbstractAnimation pour générer ses QScrollEvents. Ce délai peut être modifié à l'aide de QScrollerProperties::FrameRate pour chaque QScroller.

Bien que ce défileur cinétique dispose d'un grand nombre de paramètres disponibles via QScrollerProperties, nous vous recommandons de les laisser tous à leurs valeurs par défaut, optimisées pour la plate-forme. Avant de les modifier, vous pouvez expérimenter avec l'exemple plot 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 contient une vue agnostique des événements d'entrée qui sont pertinents pour QScroller.

ConstanteValeurDescription de l'événement
QScroller::InputPress1L'utilisateur a appuyé sur le dispositif d'entrée (par exemple QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin)
QScroller::InputMove2L'utilisateur a déplacé le dispositif d'entrée (par exemple QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate)
QScroller::InputRelease3L'utilisateur a relâché le dispositif 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 l'outil de reconnaissance gestuelle QScroller.

ConstanteValeurDescription
QScroller::TouchGesture0L'outil de reconnaissance gestuelle ne se déclenche que sur des événements tactiles. Plus précisément, il réagit à des points de contact uniques lorsqu'il utilise un écran tactile et à des points de contact doubles lorsqu'il utilise un pavé tactile.
QScroller::LeftMouseButtonGesture1L'outil de reconnaissance gestuelle se déclenche uniquement sur les événements liés au bouton gauche de la souris.
QScroller::MiddleMouseButtonGesture3L'outil de reconnaissance gestuelle ne se déclenche que sur les événements liés au bouton du milieu de la souris.
QScroller::RightMouseButtonGesture2Le détecteur de gestes ne se déclenche que sur les événements du bouton droit de la souris.

enum QScroller::State

Cette énumération contient les différents états de QScroller.

ConstanteValeurDescription de l'état
QScroller::Inactive0Le défileur ne défile pas et rien n'est pressé.
QScroller::Pressed1Un événement tactile a été reçu ou le bouton de la souris a été enfoncé, mais la zone de défilement n'est actuellement pas déplacée.
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 sur les propriétés

scrollerProperties : QScrollerProperties

Cette propriété contient les propriétés du défilement de ce défileur. Ces propriétés sont utilisées par le site QScroller pour déterminer le comportement du 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 scroller

Fonctions d'accès :

QScroller::State state() const

Signal du notificateur :

void stateChanged(QScroller::State newState)

Voir aussi QScroller::State.

Documentation des fonctions membres

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

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

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

Commence le défilement de manière à ce que le rectangle rect soit visible à l'intérieur de la fenêtre de visualisation, 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 les marges à l'intérieur de la fenêtre de visualisation, le contenu est défilé de manière à ce que la plus grande partie possible 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 laps de temps défini par la plateforme.

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

Note : Ce slot est surchargé. Pour se 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 connecting to overloaded slots (connexion à des slots surchargés).

Voir aussi scrollTo().

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

Cette version atteindra sa position de destination en scrollTime millisecondes.

Note : Ce slot est surchargé. Pour se 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, voir se connecter à des slots surchargés.

QPointF QScroller::finalPosition() const

Renvoie la position finale estimée pour le mouvement de défilement actuel. Renvoie la position actuelle si l'état du défileur n'est pas Défilement. Le résultat est indéfini si l'état du défileur est Inactif.

La position cible est exprimée en pixels.

Voir aussi pixelPerMeter() et scrollTo().

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

Enregistre un reconnaissant de geste de défilement personnalisé, le saisit pour target et renvoie le type de geste résultant. Si scrollGestureType est défini sur TouchGesture, le geste se déclenche sur les événements tactiles. S'il est défini sur LeftMouseButtonGesture, RightMouseButtonGesture ou MiddleMouseButtonGesture, il se déclenche sur les événements de souris du bouton correspondant.

Un seul geste de défilement peut être actif simultanément sur un même objet. Si vous appelez cette fonction deux fois sur le même objet, elle annulera le geste existant avant de saisir le nouveau.

Remarque : pour éviter des effets secondaires indésirables, les événements de la souris sont consommés pendant que le geste est déclenché. Étant donné que l'événement initial de pression de la souris n'est pas consommé, le geste envoie un faux événement de relâchement de la souris à la position globale (INT_MIN, INT_MIN). Cela garantit la cohérence des états internes du widget qui a reçu la pression initiale de la souris.

Voir également ungrabGesture() et grabbedGesture().

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

Renvoie le type de geste actuellement saisi pour target ou 0 si aucun geste n'est saisi.

Voir aussi grabGesture() et ungrabGesture().

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

Cette fonction est utilisée par les outils de reconnaissance gestuelle pour informer le défileur de l'existence d'un nouvel événement d'entrée. Le défileur modifie son state() interne en fonction de l'événement d'entrée et des propriétés de défilement qui lui sont attachées. Le défileur ne fait pas de distinction entre le type de périphérique d'entrée à l'origine de l'événement. Par conséquent, l'événement doit être divisé en un type input, un position et un milli-seconde timestamp. Le position doit se trouver dans le système de coordonnées de la cible.

La valeur de retour est true si l'événement doit être consommé par le filtre appelant ou false si l'événement doit être transmis au contrôle.

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

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

Renvoie true si un objet QScroller a déjà été créé pour target; false sinon.

Voir aussi scroller().

QPointF QScroller::pixelPerMeter() const

Renvoie le nombre de 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'une adresse QPointF.

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

[slot] void QScroller::resendPrepareEvent()

Cette fonction renvoie l'adresse QScrollPrepareEvent. L'appel à resendPrepareEvent déclenche l'envoi de QScrollPrepareEvent par le défileur. Cela permet au destinataire de redéfinir la position et la taille du contenu pendant le défilement. Il est inutile d'appeler cette fonction lorsque l'état est inactif, car l'événement de préparation est à nouveau envoyé avant le début du défilement.

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

Démarre le défilement du widget de sorte que le point pos se trouve en haut à gauche de la fenêtre.

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éfileur peut ou non dépasser la vitesse de défilement.

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

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

Note : Ce slot est surchargé. Pour se 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 se connecter à des slots surchargés.

Voir aussi ensureVisible().

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

Cette version atteindra sa position de destination en scrollTime millisecondes.

Note : Ce slot est surchargé. Pour se 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, voir se connecter à des slots surchargés.

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

Renvoie le scroller pour l'objet target. Tant que l'objet existe, cette fonction renvoie toujours la même instance QScroller. S'il n'existe pas de QScroller pour le target, une instance sera implicitement créée. À aucun moment, plus d'un QScroller ne sera 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 scroller().

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

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

QScroller émet ce signal chaque fois que ses propriétés de défilement changent. newProperties sont les nouvelles propriétés de défilement.

Note : Signal de notification pour la propriété scrollerProperties.

Voir aussi scrollerProperties.

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

Définir les positions d'accrochage pour l'axe horizontal dans une liste de positions. Cela 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 une liste de positions vide.

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

Définissez les positions d'accrochage de l'axe horizontal à intervalles réguliers. La première position d'accrochage se trouve à first. La suivante est first + interval. Ceci peut être utilisé pour implémenter un en-tête de liste. Cela écrase 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éfinir les positions d'accrochage pour l'axe vertical dans une liste de positions. Cela 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 une liste de positions vide.

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

Définissez les positions d'accrochage de l'axe vertical à intervalles réguliers. La première position d'accrochage se trouve à first. La suivante est first + interval. Cela écrase 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.

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

QScroller émet ce signal chaque fois que l'état change. newState est le nouvel état.

Note : Signal de notification pour la propriété state.

Voir aussi state.

void QScroller::stop()

Arrête le défileur et rétablit son état à Inactif.

QObject *QScroller::target() const

Renvoie l'objet cible de ce scroller.

Voir aussi hasScroller() et scroller().

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

Libère le geste pour le site target. Ne fait rien si aucun geste n'est saisi.

Voir aussi grabGesture() et grabbedGesture().

QPointF QScroller::velocity() const

Renvoie la vitesse de défilement actuelle en mètres par seconde lorsque l'état est Défilement ou Glissement. Renvoie une vitesse nulle dans le cas contraire.

La vitesse est indiquée séparément pour les axes x et y à l'aide d'une adresse 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.