QScroller 类

QScroller类为任何滚动小部件或图形项启用触觉导航。 更多...

头文件 #include <QScroller>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QObject

公共类型

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

属性

公共函数

QPointFfinalPosition() const
boolhandleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
QPointFpixelPerMeter() const
QScrollerPropertiesscrollerProperties() const
voidsetSnapPositionsX(const QList<qreal> &positions)
voidsetSnapPositionsX(qreal first, qreal interval)
voidsetSnapPositionsY(const QList<qreal> &positions)
voidsetSnapPositionsY(qreal first, qreal interval)
QScroller::Statestate() const
voidstop()
QObject *target() const
QPointFvelocity() const

公共槽

voidensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
voidensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
voidresendPrepareEvent()
voidscrollTo(const QPointF &pos)
voidscrollTo(const QPointF &pos, int scrollTime)
voidsetScrollerProperties(const QScrollerProperties &prop)

信号

voidscrollerPropertiesChanged(const QScrollerProperties &newProperties)
voidstateChanged(QScroller::State newState)

静态公共成员

QListactiveScrollers()
Qt::GestureTypegrabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
Qt::GestureTypegrabbedGesture(QObject *target)
boolhasScroller(QObject *target)
QScroller *scroller(QObject *target)
const QScroller *scroller(const QObject *target)
voidungrabGesture(QObject *target)

详细描述

运动滚动功能允许用户在给定方向推动小部件,并将其持续滚动直至用户或摩擦力停止。可以通过改变惯性、摩擦力和其他物理概念以优化用户体验。

QScroller对象存储当前位置和滚动速度并负责更新。QScroller可以通过拨动手势触发,或直接触发

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

例如:

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

当需要更新其几何信息时,滚动QObjects将接收到QScrollPrepareEvent,当实际需要滚动对象内容时将接收到QScrollEvent

滚动器使用全局QAbstractAnimation定时器生成其QScrollEvents。这可以通过在单个QScroller上使用QScrollerProperties::FrameRate进行更改。

尽管这个惯性滚动器提供大量可通过QScrollerProperties访问的设置,但我们建议保留它们的默认值,并进行平台优化。在更改它们之前,您可以在“滚动器”示例目录中的plot示例中进行实验。

也见 QScrollEventQScrollPrepareEventQScrollerProperties

成员类型文档

枚举 QScroller::Input

此枚举包含了与QScroller相关的输入设备无关的输入事件。

常量描述
QScroller::InputPress1用户按下输入设备(例如 QEvent::MouseButtonPressQEvent::GraphicsSceneMousePressQEvent::TouchBegin
QScroller::InputMove2用户移动输入设备(例如 QEvent::MouseMoveQEvent::GraphicsSceneMouseMoveQEvent::TouchUpdate
QScroller::InputRelease3用户释放输入设备(例如 QEvent::MouseButtonReleaseQEvent::GraphicsSceneMouseReleaseQEvent::TouchEnd

枚举 QScroller::ScrollerGestureType

此枚举包含了由QScroller手势识别器支持的不同的手势类型。

常量描述
QScroller::TouchGesture0手势识别器仅对触摸事件有效。具体地说,当使用触摸屏时会在单个触点上响应,当使用触摸板时会在双点触控上响应。
QScroller::LeftMouseButtonGesture1手势识别器仅对接左键事件有效。
QScroller::MiddleMouseButtonGesture3手势识别器仅对接中键事件有效。
QScroller::RightMouseButtonGesture2手势识别器仅在右鼠标按钮事件上触发。

enum QScroller::State

此枚举包含不同的 QScroller 状态。

常量描述
QScroller::Inactive0滚动器未滚动且未按下任何按钮。
QScroller::Pressed1收到触摸事件或按下鼠标按钮,但当前未拖动滚动区域。
QScroller::Dragging2滚动区域目前正跟随触摸点或鼠标。
QScroller::Scrolling3滚动区域正在自行移动。

属性文档

scrollerProperties : QScrollerProperties

此属性包含此滚动器的滚动器属性。这些属性用于 QScroller 确定其滚动行为。

访问函数

QScrollerPropertiesscrollerProperties() const
voidsetScrollerProperties(const QScrollerProperties &prop)

通知信号

voidscrollerPropertiesChanged(const QScrollerProperties &newProperties)

[read-only] state : const State

此属性包含滚动器的状态

访问函数

QScroller::Statestate() const

通知信号

voidstateChanged(QScroller::State newState)

另请参阅 QScroller::State.

成员函数文档

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

返回当前活动中的应用范围列表 QScroller 对象。活动的 QScroller 对象处于不是 QScroller::Inactivestate() 状态。此函数在编写自己的手势识别器时很有用。

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

开始滚动,以便矩形 rect 可在视口内可见,并围绕 rect 的像素边缘指定额外的边距。

在不能将矩形及其边距完全放入视口的情况下,内容将滚动,以便尽可能多地从 rect 中可见。

滚动速度的计算以确保在平台定义的时间段后到达给定位置。

此函数通过调用 scrollTo() 执行实际的滚动。

另请参阅 scrollTo().

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

这是一个重载函数。

本版本将在 scrollTime 毫秒内到达目标位置。

QPointF QScroller::finalPosition() const

返回当前滚动动作的预计最终位置。如果滑块状态不是滚动,则返回当前位置。当滑块状态为非活动状态时,结果未定义。

目标位置以像素为单位。

另请参阅 pixelPerMeter() 和 scrollTo()。

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

注册自定义滚动手势识别器,为 target 获取它并返回所得到的手势类型。如果 scrollGestureType 设置为 TouchGesture,则手势在触摸事件上触发。如果它设置为 LeftMouseButtonGestureRightMouseButtonGestureMiddleMouseButtonGesture,则在相应的鼠标按钮的鼠标事件上触发。

任何时刻单个对象上只能有一个滚动手势是活动的。如果您在同一对象上连续调用此函数两次,它将在获取新手势之前取消已获取的手势。

注意:为了防止不希望的结果,当手势激发时,鼠标事件会被消耗。由于初始鼠标按下事件没有消耗,手势会在全局位置 (INT_MIN, INT_MIN) 发送一个假的鼠标释放事件。这确保了接受原始鼠标按下事件的小部件的内部状态是一致的。

另请参阅 ungrabGesture() 和 grabbedGesture()。

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

返回当前为 target 抓取的手势类型,如果没有抓取任何手势,则返回 0。

另请参阅 grabGesture() 和 ungrabGesture()。

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

此函数用于由手势识别器通知滑块关于新的输入事件。滑块根据输入事件的类型及其附加的滑块属性更改其内部 状态()。滑块不区分事件来自哪种输入设备。因此,需要将事件分割为 input 类型、一个 position 和一个以毫秒为单位的 timestamp。该 position 需要位于目标的坐标系中。

如果事件应该被调用过滤器消耗,则返回值是 true;如果事件应该被转发到控件,则返回 false

注意: 对于大多数使用场景,使用 grabGesture() 应该是足够的。

[静态] bool QScroller::hasScroller(QObject *target)

如果为目标 target 创建了一个 QScroller 对象,则返回 true;否则返回 false

另请参阅 scroller

QPointF QScroller::pixelPerMeter() const

返回滚动小部件的每米像素数。

该值分别通过使用 QPointF 分别报告 x 和 y 轴。

注意: 请注意,此值应物理正确。Qt 为显示器返回的实际 DPI 设置可能由于底层窗口系统(例如在 macOS 上)有意进行报告错误。

[槽] void QScroller::resendPrepareEvent()

此函数重新发送 QScrollPrepareEvent。调用 resendPrepareEvent 将从滚动器触发 QScrollPrepareEvent。这允许接收器在滚动时重新设置内容位置和内容大小。在非活动状态下调用此函数是无效的,因为滚动开始之前会再次发送准备事件。

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

开始滚动小部件,使点 pos 在视口中的左上角。

当滚动到有效滚动区域之外时,行为是未定义的。在这种情况下,滚动器可能过了界或没有过界。

滚动速度将计算,以便在平台定义的时间间隔后达到给定位置。

pos 以视口坐标给出。

另请参阅 ensureVisible

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

这是一个重载函数。

本版本将在 scrollTime 毫秒内到达目标位置。

[静态] QScroller *QScroller::scroller(QObject *target)

返回给定的 target 的滚动器。只要对象存在,此函数总是会返回相同的 QScroller 实例。如果在 target 上没有为 QScroller 创建,则会隐式创建一个。在任何时候,一个对象都不会同时激活多个 QScroller

另请参阅 hasScroller() 和 target

[静态] const QScroller *QScroller::scroller(const QObject *target)

这是一个重载函数。

这是 scroller() 的常量版本。

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

每当 QScroller 的滚动器属性更改时,QScroller 会发出此信号。 newProperties 是新的滚动器属性。

注意: 属性 scrollerProperties 的通知信号。

另请参阅scrollerProperties.

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

将水平轴上的快照位置设置为positions列表。这将覆盖所有之前设置的快照位置和之前设置的快照间隔。通过设置空的位置列表可以停用快照功能。

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

将水平轴上的快照位置设置为等距间隔。第一个快照位置在first处。下一个在first + interval处。可用于实现列表标题。这将覆盖所有之前设置的快照位置和之前设置的快照间隔。通过设置间隔为0.0可以停用快照功能。

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

将垂直轴上的快照位置设置为positions列表。这将覆盖所有之前设置的快照位置和之前设置的快照间隔。通过设置空的位置列表可以停用快照功能。

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

将垂直轴上的快照位置设置为等距间隔。第一个快照位置在first处。下一个在first + interval处。这将覆盖所有之前设置的快照位置和之前设置的快照间隔。通过设置间隔为0.0可以停用快照功能。

[信号] void QScroller::stateChanged(QScroller::State newState)

QScroller在状态改变时发出此信号。newState是新的状态。

注意:属性 state 的通知信号。

另请参阅state.

void QScroller::stop()

停止滚轴并将其状态重置为非活动。

QObject *QScroller::target() const

返回此滚轴的目标对象。

另请参阅hasScroller() 和 scroller

[静态] void QScroller::ungrabGesture(QObject *target)

取消对target的手势请求。如果没有手势被请求,则不执行任何操作。

另请参阅grabGesture() 和 grabbedGesture

QPointF QScroller::velocity() const

当状态为滚动或拖拽时,返回每秒钟的滚动速度(米)。否则返回零速度。

使用QPointF分别对x和y轴的速度进行报告。

另请参阅 pixelPerMeter

© 2024 The Qt Company Ltd. 本文中包含的文档贡献版权归各自所有者所有。本提供的文档是根据由自由软件基金会发布的 GNU自由文档许可协议版本1.3 条款许可的。Qt 及相关标志是芬兰及/或其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。