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
- scrollerProperties : QScrollerProperties
- state : State
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
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.
| Constante | Valeur | Description de l'événement |
|---|---|---|
QScroller::InputPress | 1 | L'utilisateur a appuyé sur le dispositif d'entrée (par exemple QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin) |
QScroller::InputMove | 2 | L'utilisateur a déplacé le dispositif d'entrée (par exemple QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate) |
QScroller::InputRelease | 3 | L'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.
| Constante | Valeur | Description |
|---|---|---|
QScroller::TouchGesture | 0 | L'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::LeftMouseButtonGesture | 1 | L'outil de reconnaissance gestuelle se déclenche uniquement sur les événements liés au bouton gauche de la souris. |
QScroller::MiddleMouseButtonGesture | 3 | L'outil de reconnaissance gestuelle ne se déclenche que sur les événements liés au bouton du milieu de la souris. |
QScroller::RightMouseButtonGesture | 2 | Le 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.
| Constante | Valeur | Description de l'état |
|---|---|---|
QScroller::Inactive | 0 | Le défileur ne défile pas et rien n'est pressé. |
QScroller::Pressed | 1 | Un é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::Dragging | 2 | La zone de défilement suit actuellement le point de contact ou la souris. |
QScroller::Scrolling | 3 | La 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); }); 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); }); 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); }); 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); }); [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.