当前位置:网站首页>QScroller的QScrollerProperties参数研究
QScroller的QScrollerProperties参数研究
2022-08-10 05:39:00 【KumaNPC】
使用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
帧率,仅允许指定枚举值
边栏推荐
- unityFps射击
- mysql连接报错:Cannot get a connection, pool error Timeout waiting for idle object
- Mysql表数据在命令行窗口下中文乱码问题解决方法
- 动态规划、背包问题 6/28 121-124
- 老手也常误用!详解 Go channel 内存泄漏问题
- Explore the origin of the garbled problem: the association between GBK, UTF8, UTF16, UTF8BOM, and ASN1
- Talking about 3 Common Shadow Rendering Techniques in Games (3): Shadow Mapping
- ebp/栈帧/call stack
- Basic use of Unity's navigation and wayfinding system
- 剑指 Offer(第 2 版)7/7 14-17
猜你喜欢
随机推荐
Why need to hot update game?
享元模式-缓存池
剑指 Offer(第 2 版)7/6 9-13
lua的模块与类
手机与雷电模拟器里如何使用YiLu代理?
21天学习挑战赛--分班
UnityShader入门精要-透明效果
剑指 Offer(第 2 版)7/4 1-4
二次元卡通渲染之描边
在TypeScript中使用parseInt()
H3C文档NAT专题
Kernel performance analysis summary
Talking about 3 Common Shadow Rendering Techniques in Games (3): Shadow Mapping
OpenGL学习笔记(LearnOpenGL)-第二部分 绘制三角形
【备份】《Unity Shader入门精要》配图
关于研究鼠标绘制平滑曲线的阶段总结
Unity插件DOTween使用指南2(简释贝塞尔曲线)
Share a professional TA's "Shader Reference"
unity箭头控制物体移动
探究乱码问题的本源:GBK,UTF8,UTF16,UTF8BOM,ASN1之间的关联









