QScroller 类
QScroller类为任何滚动小部件或图形项启用触觉导航。 更多...
头文件 | #include <QScroller> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承 | QObject |
公共类型
枚举 | Input { InputPress, InputMove, InputRelease } |
枚举 | ScrollerGestureType { TouchGesture, LeftMouseButtonGesture, MiddleMouseButtonGesture, RightMouseButtonGesture } |
枚举 | State { Inactive, Pressed, Dragging, Scrolling } |
属性
- scrollerProperties : QScrollerProperties
- state : const State
公共函数
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 |
公共槽
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) |
信号
void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
void | stateChanged(QScroller::State newState) |
静态公共成员
QList | 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) |
详细描述
运动滚动功能允许用户在给定方向推动小部件,并将其持续滚动直至用户或摩擦力停止。可以通过改变惯性、摩擦力和其他物理概念以优化用户体验。
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
示例中进行实验。
也见 QScrollEvent、QScrollPrepareEvent 和QScrollerProperties。
成员类型文档
枚举 QScroller::Input
此枚举包含了与QScroller相关的输入设备无关的输入事件。
常量 | 值 | 描述 |
---|---|---|
QScroller::InputPress | 1 | 用户按下输入设备(例如 QEvent::MouseButtonPress、QEvent::GraphicsSceneMousePress、QEvent::TouchBegin) |
QScroller::InputMove | 2 | 用户移动输入设备(例如 QEvent::MouseMove、QEvent::GraphicsSceneMouseMove、QEvent::TouchUpdate) |
QScroller::InputRelease | 3 | 用户释放输入设备(例如 QEvent::MouseButtonRelease、QEvent::GraphicsSceneMouseRelease、QEvent::TouchEnd) |
枚举 QScroller::ScrollerGestureType
此枚举包含了由QScroller手势识别器支持的不同的手势类型。
常量 | 值 | 描述 |
---|---|---|
QScroller::TouchGesture | 0 | 手势识别器仅对触摸事件有效。具体地说,当使用触摸屏时会在单个触点上响应,当使用触摸板时会在双点触控上响应。 |
QScroller::LeftMouseButtonGesture | 1 | 手势识别器仅对接左键事件有效。 |
QScroller::MiddleMouseButtonGesture | 3 | 手势识别器仅对接中键事件有效。 |
QScroller::RightMouseButtonGesture | 2 | 手势识别器仅在右鼠标按钮事件上触发。 |
enum QScroller::State
此枚举包含不同的 QScroller 状态。
常量 | 值 | 描述 |
---|---|---|
QScroller::Inactive | 0 | 滚动器未滚动且未按下任何按钮。 |
QScroller::Pressed | 1 | 收到触摸事件或按下鼠标按钮,但当前未拖动滚动区域。 |
QScroller::Dragging | 2 | 滚动区域目前正跟随触摸点或鼠标。 |
QScroller::Scrolling | 3 | 滚动区域正在自行移动。 |
属性文档
scrollerProperties : QScrollerProperties
此属性包含此滚动器的滚动器属性。这些属性用于 QScroller 确定其滚动行为。
访问函数
QScrollerProperties | scrollerProperties() const |
void | setScrollerProperties(const QScrollerProperties &prop) |
通知信号
void | scrollerPropertiesChanged(const QScrollerProperties &newProperties) |
[read-only]
state : const State
此属性包含滚动器的状态
访问函数
QScroller::State | state() const |
通知信号
void | stateChanged(QScroller::State newState) |
另请参阅 QScroller::State.
成员函数文档
[static]
QList<QScroller *> QScroller::activeScrollers()
返回当前活动中的应用范围列表 QScroller 对象。活动的 QScroller 对象处于不是 QScroller::Inactive 的 state() 状态。此函数在编写自己的手势识别器时很有用。
[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,则手势在触摸事件上触发。如果它设置为 LeftMouseButtonGesture、RightMouseButtonGesture 或MiddleMouseButtonGesture,则在相应的鼠标按钮的鼠标事件上触发。
任何时刻单个对象上只能有一个滚动手势是活动的。如果您在同一对象上连续调用此函数两次,它将在获取新手势之前取消已获取的手势。
注意:为了防止不希望的结果,当手势激发时,鼠标事件会被消耗。由于初始鼠标按下事件没有消耗,手势会在全局位置 (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. 的商标。所有其他商标均为其各自所有者的财产。