QScroller Class

Header:#include < QScroller >
qmake:QT += widgets
Since:Qt 5.0
Inherits:QObject

This class was introduced in Qt 5.0.

Public Types

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

Properties

scrollerProperties : QScrollerProperties
state : const State 

Public Functions

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

Public Slots

void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
void resendPrepareEvent()
void scrollTo(const QPointF &pos, int scrollTime)
void scrollTo(const QPointF &pos)
void setScrollerProperties(const QScrollerProperties &prop)

Signals

void scrollerPropertiesChanged(const QScrollerProperties &newProperties)
void stateChanged(QScroller::State newState)

Static Public Members

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)

Detailed Description

使用动态滚动,用户可以向给定方向推动小部件,它将继续沿着该方向滚动,直到被用户或摩擦停止。可以改变惯性、摩擦和其他物理概念,以微调直观的用户体验。
qscroll对象是存储当前位置和滚动速度并负责更新的对象。qscroll可以通过轻击手势触发

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

或者直接像这样:

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

滚动的QObjects在滚动需要更新其几何信息时接收一个QScrollPrepareEvent,在对象的内容需要实际滚动时接收一个QScrollEvent。
滚轮使用全局的QAbstractAnimation计时器来生成它的QScrollEvents。这可以在每个qscroll的基础上使用QScrollerProperties::FrameRate进行更改。
滚动示例目录中的几个示例展示了如何使用QScroller、QScrollEvent和滚动手势。
尽管这个动态滚轮通过QScrollerProperties有大量可用的设置,我们建议您将它们全部保留为默认的平台优化值。在更改它们之前,您可以在滚动示例目录中试用绘图示例。
See also QScrollEvent, QScrollPrepareEvent, and QScrollerProperties.

Member Type Documentation

enum QScroller::Input
该枚举包含与qroller相关的输入事件的输入设备无关视图。
ConstantValueDescription
QScroller::InputPress1The user pressed the input device (e.g. QEvent::MouseButtonPress, QEvent::GraphicsSceneMousePress, QEvent::TouchBegin)
QScroller::InputMove2The user moved the input device (e.g. QEvent::MouseMove, QEvent::GraphicsSceneMouseMove, QEvent::TouchUpdate)
QScroller::InputRelease3The user released the input device (e.g. QEvent::MouseButtonRelease, QEvent::GraphicsSceneMouseRelease, QEvent::TouchEnd)
enum QScroller::ScrollerGestureType
此枚举包含qscroll手势识别器支持的不同手势类型。
ConstantValueDescription
QScroller::TouchGesture0手势识别器只会在触摸事件时触发。具体来说,当使用触摸屏时,它会在单触点上做出反应,当使用触摸板时,它会在双触点上做出反应。
QScroller::LeftMouseButtonGesture1手势识别器只会触发鼠标左键事件。
QScroller::MiddleMouseButtonGesture3手势识别器只会在鼠标中键事件时触发。
QScroller::RightMouseButtonGesture2手势识别器只会在鼠标右键事件时触发。
enum QScroller::State
此枚举包含不同的qscroll状态。
ConstantValueDescription
QScroller::Inactive0滚轮没有滚动,也没有按下任何东西。
QScroller::Pressed1收到触摸事件或按下鼠标按钮,但滚动区域当前未被拖动。
QScroller::Dragging2滚动区域当前跟随触摸点或鼠标。
QScroller::Scrolling3滚动区域会自己移动。

Property Documentation

scrollerProperties : QScrollerProperties
	此属性保存此滚轮的滚轮属性。QScroller使用这些属性来确定其滚动行为。
访问函数:
	QScrollerProperties scrollerProperties() const
	void setScrollerProperties(const QScrollerProperties &prop)
通知信号:
	void scrollerPropertiesChanged(const QScrollerProperties &newProperties)
state : const State
	此属性保存滚轮的状态
访问函数:
	QScroller::State state() const
通知信号:
	void stateChanged(QScroller::State newState)

See also QScroller::State.

Member Function Documentation

[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime)
	这是一个重载函数。
	此版本将在scrollTime毫秒内到达目标位置。
[slot] void QScroller::ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin)
	开始滚动,使矩形矩形在视口中可见,并在矩形周围使用xmargin和ymargin以像素指定附加边距。
	如果在viewport内不可能匹配rect +边距,则滚动内容,以便尽可能多地从rect可见。
	计算滚动速度,以便在平台定义的时间跨度之后到达给定位置。
	这个函数通过调用scrollTo()来执行实际的滚动操作。
See also scrollTo().
[slot] void QScroller::resendPrepareEvent()
	这个函数重新发送QScrollPrepareEvent。调用resendPrepareEvent从滚动轮触发QScrollPrepareEvent。
这允许接收者在滚动时重新设置内容位置和内容大小。
在Inactive状态下调用此函数是无用的,因为在滚动开始之前会再次发送prepare事件。
[slot] void QScroller::scrollTo(const QPointF &pos, int scrollTime)
	这是一个重载函数。
	此版本将在scrollTime毫秒内到达目标位置。
[slot] void QScroller::scrollTo(const QPointF &pos)
	开始滚动小部件,使点pos位于视口的左上角。
	在有效滚动区域之外滚动时的行为是未定义的。在这种情况下,滚轮可能会或不会超调。
	将计算滚动速度,以便在平台定义的时间跨度之后到达给定位置。
	Pos在视口坐标中给出。
	
See also ensureVisible().
[signal] void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties)
	每当它的滚轮属性改变时,QScroller都会发出这个信号。newProperties是新的滚动条属性。
	注意:属性scrollerProperties的通知器信号。

See also scrollerProperties.
[signal] void QScroller::stateChanged(QScroller::State newState)
	每当状态改变时,qscroll都会发出这个信号。newState是新的State。
	注意:属性状态的通知器信号。

See also state.
[static] QList<QScroller *> QScroller::activeScrollers()
	返回当前活动qscroll对象的应用程序范围列表。活动QScroller对象处于非QScroller::Inactive状态()。这个函数在编写自己的手势识别器时非常有用。
QPointF QScroller::finalPosition() const
	返回当前滚动移动的估计最终位置。如果滚轮状态不是滚动状态,则返回当前位置。当滚动条状态为Inactive时,结果是未定义的。
	目标位置以像素为单位。

See also pixelPerMeter() and scrollTo().
[static] Qt::GestureType QScroller::grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = TouchGesture)
	注册一个自定义滚动手势识别器,为目标获取它并返回结果手势类型。如果scrollGestureType被设置为TouchGesture,手势会触发触摸事件。如果它被设置为LeftMouseButtonGesture, RightMouseButtonGesture或MiddleMouseButtonGesture中的一个,它将触发相应按钮的鼠标事件。
	同一时间,一个对象上只能激活一个滚动手势。如果在同一个对象上调用此函数两次,它将在抓取新手势之前取消抓取现有手势。
	注意:为了避免不必要的副作用,在触发手势时消耗鼠标事件。由于初始的鼠标按下事件没有被消耗,手势在全局位置(INT_MIN, INT_MIN)发送一个假的鼠标释放事件。这确保了接收到原始鼠标按压的小部件的内部状态是一致的。
See also ungrabGesture() and grabbedGesture().
[static] Qt::GestureType QScroller::grabbedGesture(QObject *target)
	返回当前为目标抓取的手势类型,如果没有抓取手势则返回0。

See also grabGesture() and ungrabGesture().
bool QScroller::handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0)
	这个函数被手势识别器用来通知滚轮一个新的输入事件。滚动条根据输入事件及其附加的滚动条属性改变其内部状态()。滚轮无法区分事件来自哪一种输入设备。因此,需要将事件拆分为输入类型、位置和毫秒时间戳。这个位置需要在目标的坐标系中。
	如果事件应由调用过滤器使用,则返回值为true;如果事件应转发到控件,则返回值为false。
	注意:对于大多数用例,使用grabGesture()应该是足够的。
[static] bool QScroller::hasScroller(QObject *target)
	如果QScroller对象已经为target创建,则返回true;否则错误。

See also scroller().
QPointF QScroller::pixelPerMeter() const
	返回滚动小部件的每米像素度量。
	通过使用QPointF分别报告x轴和y轴的值。
	注意:请注意,此值应在物理上正确。Qt为显示返回的实际DPI设置可能被底层窗口系统故意错误地报告,例如在macOS上。
[static] QScroller *QScroller::scroller(QObject *target)
	返回给定目标的滚轮。只要对象存在,此函数将始终返回相同的qroller实例。如果目标不存在qscroll,则将隐式地创建一个。在任何情况下,一个对象上都不能有多个qscroll处于活动状态。
See also hasScroller() and target().
[static] const QScroller *QScroller::scroller(const QObject *target)
	这是一个重载函数。
	这是scroller()const版本。
void QScroller::setSnapPositionsX(const QList<qreal> &positions)
	将水平轴的快照位置设置为位置列表。这将覆盖所有先前设置的捕获位置以及先前设置的捕获间隔。可以通过设置一个空的位置列表来禁用捕捉。
void QScroller::setSnapPositionsX(qreal first, qreal interval)
	将水平轴的快照位置设置为规则间隔。第一个抓拍位置是在第一。
下一个在第一个+间隔。这可以用来实现一个列表头。
这将覆盖所有先前设置的捕获位置以及先前设置的捕获间隔。可以通过将间隔设置为0.0来停用捕捉
void QScroller::setSnapPositionsY(const QList<qreal> &positions)
	将垂直轴的快照位置设置为位置列表。
这将覆盖所有先前设置的捕获位置以及先前设置的捕获间隔。
可以通过设置一个空的位置列表来禁用捕捉。
void QScroller::setSnapPositionsY(qreal first, qreal interval)
	将垂直轴的快照位置设置为规则间隔。第一个抓拍位置是在第一。
下一个在第一个+间隔。这将覆盖所有先前设置的捕获位置以及先前设置的捕获间隔。
可以通过将间隔设置为0.0来停用捕捉
void QScroller::stop()
	停止滚轮并将其状态重置为非活动状态。
QObject *QScroller::target() const
	返回此滚轮的目标对象。
See also hasScroller() and scroller().
[static] void QScroller::ungrabGesture(QObject *target)
	松开目标的手势。如果没有手势被抓取,则不执行任何操作。
See also grabGesture() and grabbedGesture().
QPointF QScroller::velocity() const
	当状态为“滚动”或“拖动”时,返回当前以米/秒为单位的滚动速度。否则返回零速度。
	通过使用QPointF分别报告x轴和y轴的速度。
See also pixelPerMeter(). 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值