QScroller Class
La clase QScroller permite el desplazamiento cinético para cualquier widget de desplazamiento o elemento gráfico. Más...
| Cabecera: | #include <QScroller> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QObject |
Tipos públicos
| enum | Input { InputPress, InputMove, InputRelease } |
| enum | ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture } |
| enum | State { Inactive, Pressed, Dragging, Scrolling } |
Propiedades
- scrollerProperties : QScrollerProperties
- state : State
Funciones públicas
| 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 |
Ranuras públicas
| 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) |
Señales
| void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
| void | stateChanged(QScroller::State newState) |
Miembros públicos estáticos
| 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) |
Descripción detallada
Con el desplazamiento cinético, el usuario puede empujar el widget en una dirección determinada y éste continuará desplazándose en esa dirección hasta que el usuario o la fricción lo detengan. Los aspectos de inercia, fricción y otros conceptos físicos pueden modificarse para conseguir una experiencia de usuario intuitiva.
El objeto QScroller es el que almacena la posición actual y la velocidad de desplazamiento y se encarga de las actualizaciones. QScroller puede activarse mediante un gesto de deslizamiento
o directamente así:
QWidget *w = ...; QScroller *scroller = QScroller::scroller(w); scroller->scrollTo(QPointF(100, 100));
Los QObjects desplazados reciben un QScrollPrepareEvent cada vez que el scroller necesita actualizar su información geométrica y un QScrollEvent cada vez que el contenido del objeto debe ser realmente desplazado.
El scroller utiliza el temporizador global QAbstractAnimation para generar sus QScrollEvents. Esto puede cambiarse con QScrollerProperties::FrameRate para cada QScroller.
Aunque este scroller cinético tiene un gran número de ajustes disponibles a través de QScrollerProperties, recomendamos que los dejes todos en sus valores por defecto, optimizados para la plataforma. Antes de cambiarlos puede experimentar con el ejemplo plot en el directorio de ejemplos scroller.
Vea también QScrollEvent, QScrollPrepareEvent, y QScrollerProperties.
Documentación de tipos de miembros
enum QScroller::Input
Este enum contiene una vista agnóstica del dispositivo de entrada de los eventos de entrada que son relevantes para QScroller.
| Constante | Valor | Descripción |
|---|---|---|
QScroller::InputPress | 1 | El usuario ha pulsado el dispositivo de entrada (p. ej. QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin) |
QScroller::InputMove | 2 | El usuario ha movido el dispositivo de entrada (p. ej. QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate) |
QScroller::InputRelease | 3 | El usuario suelta el dispositivo de entrada (por ejemplo, QEvent::MouseButtonRelease, QEvent::GraphicsSceneMouseRelease, QEvent::TouchEnd) |
enum QScroller::ScrollerGestureType
Este enum contiene los distintos tipos de gestos que admite el reconocedor de gestos QScroller.
| Constante | Valor | Descripción |
|---|---|---|
QScroller::TouchGesture | 0 | El reconocedor de gestos sólo se activará en eventos táctiles. Específicamente, reaccionará en puntos táctiles simples cuando se utilice una pantalla táctil y en puntos táctiles duales cuando se utilice un touchpad. |
QScroller::LeftMouseButtonGesture | 1 | El reconocedor de gestos sólo se activará ante eventos del botón izquierdo del ratón. |
QScroller::MiddleMouseButtonGesture | 3 | El reconocedor de gestos sólo se activará ante eventos del botón central del ratón. |
QScroller::RightMouseButtonGesture | 2 | El reconocedor de gestos sólo se activará en los eventos del botón derecho del ratón. |
enum QScroller::State
Este enum contiene los diferentes estados de QScroller.
| Constante | Valor | Descripción |
|---|---|---|
QScroller::Inactive | 0 | El scroll no se está desplazando y no hay nada pulsado. |
QScroller::Pressed | 1 | Se ha recibido un evento táctil o se ha pulsado el botón del ratón pero el área de desplazamiento no se está arrastrando actualmente. |
QScroller::Dragging | 2 | El área de desplazamiento está siguiendo el punto táctil o el ratón. |
QScroller::Scrolling | 3 | El área de desplazamiento se está moviendo por sí misma. |
Documentación de propiedades
scrollerProperties : QScrollerProperties
Esta propiedad contiene las propiedades de desplazamiento de este desplazador. Estas propiedades son utilizadas por QScroller para determinar su comportamiento de desplazamiento.
Funciones de acceso:
| QScrollerProperties | scrollerProperties() const |
| void | setScrollerProperties(const QScrollerProperties &prop) |
Señal del notificador:
| void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
[read-only] state : State
Esta propiedad contiene el estado del scroller
Funciones de acceso:
| QScroller::State | state() const |
Señal del notificador:
| void | stateChanged(QScroller::State newState) |
Véase también QScroller::State.
Documentación de las funciones miembro
[static] QList<QScroller *> QScroller::activeScrollers()
Devuelve una lista de todos los objetos QScroller activos en la aplicación. Los objetos QScroller activos se encuentran en un state() que no es QScroller::Inactive. Esta función es útil cuando escribes tu propio reconocedor de gestos.
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
Inicia el desplazamiento de forma que el rectángulo rect sea visible dentro de la ventana gráfica con márgenes adicionales especificados en píxeles por xmargin y ymargin alrededor del rectángulo.
En los casos en los que no es posible ajustar el rectángulo más los márgenes dentro de la ventana gráfica, el contenido se desplaza de forma que sea visible desde rect tanto como sea posible.
La velocidad de desplazamiento se calcula de forma que la posición dada se alcance tras un lapso de tiempo definido por la plataforma.
Esta función realiza el desplazamiento real llamando a scrollTo().
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// 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); }); Véase también scrollTo().
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
Esta versión alcanzará su posición de destino en scrollTime milisegundos.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// 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
Devuelve la posición final estimada para el movimiento de desplazamiento actual. Devuelve la posición actual si el estado del desplazamiento no es Desplazamiento. El resultado es indefinido si el estado del desplazamiento es Inactivo.
La posición final está en píxeles.
Véase también pixelPerMeter() y scrollTo().
[static] Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
Registra un reconocedor de gestos de desplazamiento personalizado, lo toma para target y devuelve el tipo de gesto resultante. Si scrollGestureType está configurado como TouchGesture, el gesto se activa con los eventos táctiles. Si está configurado como LeftMouseButtonGesture, RightMouseButtonGesture o MiddleMouseButtonGesture, el gesto se activa con los eventos de ratón del botón correspondiente.
Sólo puede haber un gesto de desplazamiento activo en un objeto al mismo tiempo. Si se llama a esta función dos veces sobre el mismo objeto, se desanclará el gesto existente antes de anclar el nuevo.
Nota: Para evitar efectos secundarios no deseados, los eventos del ratón se consumen mientras se activa el gesto. Dado que el evento inicial de pulsación del ratón no se consume, el gesto envía un falso evento de liberación del ratón en la posición global (INT_MIN, INT_MIN). Esto asegura que los estados internos del widget que recibió la pulsación original del ratón sean consistentes.
Véase también ungrabGesture() y grabbedGesture().
[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)
Devuelve el tipo de gesto actualmente capturado para target o 0 si no hay ningún gesto capturado.
Véase también grabGesture() y ungrabGesture().
bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
Esta función es utilizada por los reconocedores de gestos para informar al desplazador sobre un nuevo evento de entrada. El desplazador cambia su dirección interna state() de acuerdo con el evento de entrada y sus propiedades de desplazamiento adjuntas. El scroller no distingue entre el tipo de dispositivo de entrada del que proviene el evento. Por lo tanto el evento necesita ser dividido en el tipo input, un position y un milisegundo timestamp. El position necesita estar en el sistema de coordenadas del objetivo.
El valor de retorno es true si el evento debe ser consumido por el filtro de llamada o false si el evento debe ser reenviado al control.
Nota: El uso de grabGesture() debería ser suficiente para la mayoría de los casos.
[static] bool QScroller::hasScroller(QObject *target)
Devuelve true si ya se ha creado un objeto QScroller para target; false en caso contrario.
Véase también scroller().
QPointF QScroller::pixelPerMeter() const
Devuelve la métrica de píxeles por metro para el widget desplazado.
El valor se indica para los ejes x e y por separado utilizando QPointF.
Nota: Tenga en cuenta que este valor debe ser físicamente correcto. La configuración real de PPP que Qt devuelve para la pantalla puede ser informada erróneamente a propósito por el sistema de ventanas subyacente, por ejemplo en macOS.
[slot] void QScroller::resendPrepareEvent()
Esta función reenvía el QScrollPrepareEvent. La llamada a resendPrepareEvent desencadena un QScrollPrepareEvent desde el scroller. Esto permite al receptor reajustar la posición y el tamaño del contenido mientras se desplaza. Llamar a esta función mientras se está en estado Inactivo es inútil ya que el evento prepare se envía de nuevo antes de que comience el desplazamiento.
[slot] void QScroller::scrollTo(const QPointF &pos)
Inicia el desplazamiento del widget de modo que el punto pos se encuentre en la posición superior izquierda de la ventana gráfica.
El comportamiento cuando se desplaza fuera del área de desplazamiento válida no está definido. En este caso, el desplazamiento puede sobrepasarse o no.
La velocidad de desplazamiento se calculará de forma que la posición dada se alcance tras un lapso de tiempo definido por la plataforma.
pos se da en coordenadas de la ventana gráfica.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// 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); }); Véase también ensureVisible().
[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)
Esta versión alcanzará su posición de destino en scrollTime milisegundos.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// 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)
Devuelve el desplazamiento del objeto target. Mientras el objeto exista, esta función devolverá siempre la misma instancia QScroller. Si no existe ningún QScroller para el target, se creará uno implícitamente. En ningún momento habrá más de un QScroller activo en un objeto.
Véase también hasScroller() y target().
[static] const QScroller *QScroller::scroller(const QObject *target)
Esta es la versión const de scroller().
Se trata de una función sobrecargada.
[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)
QScroller emite esta señal cada vez que sus propiedades de desplazamiento cambian. newProperties son las nuevas propiedades de desplazamiento.
Nota: Señal notificadora para la propiedad scrollerProperties.
Véase también scrollerProperties.
void QScroller::setSnapPositionsX(const QList<qreal> &positions)
Establezca las posiciones de ajuste para el eje horizontal en una lista de positions. Esto sobrescribe todas las posiciones de ajuste establecidas anteriormente y también un intervalo de ajuste establecido previamente. El ajuste puede desactivarse estableciendo una lista vacía de posiciones.
void QScroller::setSnapPositionsX(qreal first, qreal interval)
Ajuste las posiciones de ajuste para el eje horizontal a intervalos espaciados regulares. La primera posición de ajuste es first. La siguiente en first + interval. Esto se puede utilizar para implementar una cabecera de lista. Esto sobrescribe todas las posiciones de ajuste previamente establecidas y también un intervalo de ajuste previamente establecido. El ajuste puede desactivarse estableciendo un intervalo de 0.0
void QScroller::setSnapPositionsY(const QList<qreal> &positions)
Establezca las posiciones de ajuste para el eje vertical en una lista de positions. Esto sobrescribe todas las posiciones de ajuste establecidas anteriormente y también un intervalo de ajuste establecido previamente. El ajuste puede desactivarse estableciendo una lista vacía de posiciones.
void QScroller::setSnapPositionsY(qreal first, qreal interval)
Ajuste las posiciones de ajuste para el eje vertical a intervalos espaciados regulares. La primera posición de ajuste es first. La siguiente en first + interval. Esto sobrescribe todas las posiciones de ajuste previamente establecidas y también un intervalo de ajuste previamente establecido. El ajuste puede desactivarse estableciendo un intervalo de 0.0
[signal] void QScroller::stateChanged(QScroller::State newState)
QScroller emite esta señal cada vez que cambia el estado. newState es el nuevo Estado.
Nota: Señal notificadora para la propiedad state.
Véase también state.
void QScroller::stop()
Detiene el desplazamiento y restablece su estado a Inactivo.
QObject *QScroller::target() const
Devuelve el objeto destino de este scroller.
Véase también hasScroller() y scroller().
[static] void QScroller::ungrabGesture(QObject *target)
Libera el gesto para target. No hace nada si no hay ningún gesto agarrado.
Véase también grabGesture() y grabbedGesture().
QPointF QScroller::velocity() const
Devuelve la velocidad de desplazamiento actual en metros por segundo cuando el estado es Desplazamiento o Arrastre. En caso contrario, devuelve una velocidad cero.
La velocidad se indica para los ejes x e y por separado utilizando QPointF.
Véase también 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.