QScroller的QScrollerProperties参数研究

使用QScroller拖拽效果的参数研究

QScrollerProperties通过丰富的参数实现拖拽的很多动画细节,本文以鼠标手势为测试,做个简单整理。

滚动效果

以下是目前的所有属性:

  • QScrollerProperties::MousePressEventDelay

    设置一个鼠标事件延迟时间,单位s。当鼠标按下后,开始手势识别,如果在该时间内开始了拖拽手势,窗口不会收到鼠标事件。

    如下动图,当鼠标开始点击后,1秒后,列表响应了按下事件:
    鼠标点击延迟

  • QScrollerProperties::DragStartDistance

    设置一个移动距离,单位m,当鼠标按下后,移动该距离后被判定为拖拽开始,防止误操作

  • QScrollerProperties::DragVelocitySmoothingFactor

    似乎是影响滚动速度的计算,拖拽速度到滚动速度的一个平滑,主要是拖拽速度与释放速度的一个比例。

  • QScrollerProperties::AxisLockThreshold

    未测试,应该是当运动方向与某一个轴的角度小于该设定值时,则限定只有该轴方向的滚动。

  • QScrollerProperties::ScrollingCurve

    滚动曲线,文档里描述为滚动的位置曲线,表现为,当鼠标释放后自动滚动到停止时的运动曲线,参数为QEasingCurve类型,不能设置为QEasingCurve::Type类型,不会隐式转换。

  • QScrollerProperties::DecelerationFactor

    减速因子,值越大,减速越快,进而会影响滚动的距离。可以参考第一个图片的滚动减速效果

  • QScrollerProperties::MinimumVelocity

    当鼠标抬起后,触发自动滚动的最小速度,单位m/s。如果手势识别的速度小于该速度,则不会触发自动滚动,所以可以设置得小一些

  • QScrollerProperties::MaximumVelocity

    自动滚动能达到得最大速度,单位m/s。

  • QScrollerProperties::MaximumClickThroughVelocity

    自动滚动过程中,鼠标点击操作会停止当前滚动,当速度大于该设定时,鼠标事件不会传递给目标。下图可以看到当速度比较快时,列表没有相应鼠标按下操作,列表项没有被选中:

    鼠标点击停止滚动

  • QScrollerProperties::AcceleratingFlickMaximumTime 和 QScrollerProperties::AcceleratingFlickSpeedupFactor

设置一个时间和加速因子,开始自动滚动后,如果在该时间内检测到轻滑加速手势,则滚动速度加速到:当前速度x加速因子,加速因子必须大于等于1.0。加速后的速度也不能超过QScrollerProperties::MaximumVelocity的设定值

滚动加速

  • QScrollerProperties::SnapPositionRatio 和 QScrollerProperties::SnapTime

    这两个暂时不清楚会有什么比较明显的变化,可能需要看源码了解具体是实现和用途,后期再补充。

  • 过量拖拽相关的属性

    这几个属性关联性比较强,放一起说明。过量拖拽或者过冲运动是指当页面处于起始或者末尾时,继续向下或向上拖拽,页面能继续拖拽,常见用于设计下拉刷新效果。可以参考本文第一个动态图开始的效果。

    属性 说明
    OvershootDragResistanceFactor 过量拖拽的移动距离与鼠标移动距离的比例,小于1时能表现出阻塞感
    OvershootDragDistanceFactor 过量拖拽的距离占页面的比例,比如设置0.5,过量拖拽垂直最多移动高度的一半
    OvershootScrollDistanceFactor 自动滚动时也可以允许过量滚动,设置一个距离比例
    OvershootScrollTime 过量拖拽到恢复页面的时间。当拖拽过量时,是释放后到恢复的时间,滚动的话应该是过量滚动和恢复两个过程的时间

    过量滚动与过量拖拽

  • QScrollerProperties::HorizontalOvershootPolicy 和 QScrollerProperties::VerticalOvershootPolicy

    允许过量拖拽的策略,可以设置滚动条出现时开启、始终关闭、始终开启三种策略

  • QScrollerProperties::FrameRate

    帧率,仅允许指定枚举值

猜你喜欢

转载自blog.csdn.net/eiilpux17/article/details/119058633
今日推荐