Maicss
2021-08-21 01:32 deepin
论坛样式拉跨,这里是博客园地址:https://www.cnblogs.com/maicss/p/15167408.html
Reply Like 0 View the author
论坛样式拉跨,这里是博客园地址:https://www.cnblogs.com/maicss/p/15167408.html
后排围观大佬~
这种新的动画方式,是不是理论上存在手速过快,比如滚轮位置从 0 开始,先向下10后向上7,所以动画效果只会从 0 - 3 这种情况?感觉这样操作就不是及时响应滚轮,而是有点像油门和刹车 XD......
后排围观大佬~
这种新的动画方式,是不是理论上存在手速过快,比如滚轮位置从 0 开始,先向下10后向上7,所以动画效果只会从 0 - 3 这种情况?感觉这样操作就不是及时响应滚轮,而是有点像油门和刹车 XD......
理论上确实存在这种情况,但是你可以下载源码试一下,由于手速快的有限,基本上不会出现这种很明显的上下抵消的问题,而且,我觉得抵消也不是特别不好,可以通过缩短动画时间来改善这种情况嘛
那我在deepin里该怎么改可以让启动器滚动不卡顿
Popular Events
More
Qt列表等控件实现平滑滚动
Qt自带的的列表控件是不能平滑滚动的,但如果滚动速度快的话很容易引起视线丢失,体验效果很差。本篇主要讲述如何在Qt中对列表控件加入平滑滚动。文中以
QScrollArea
控件为例,其他控件方法一样。原理
Qt的列表控件中,有以下两个接口:
显然上述两个接口的作用是设置控件的横纵两个滚动条,以指针形式传入,我们将以此来实现控制页面的滚动。传入滚动条对象后,我们就可以使用
setValue()
来间接控制页面的滚动了。然后再使用QPropertyAnimation
类来实现滚动的效果。实现
一、自定义滚动条控件
需要实现两个功能:
当使用
setValue()
对滚动条的滑块进行移动时,滑块会在一个时间段内以某种规律连续的移动到目标位置,而不是瞬间移动。新增一个槽函数
void scroll(int value)
,实现传入一个数字后相对滚动指定距离。如:scroll(100)就是向下滚动100个单位。头文件:
源文件:
二、自定义列表控件
将列表的滚动条替换为我们刚刚自定义的滚动条
头文件:
源文件:
到此为止,
SmoothScrollArea
类便可以支持纵向的平滑滚动。其他的列表控件方法一致。三、测试效果
将
SmoothScrollArea
列表控件加入到主窗口后,运行即可。补充
在此之前参考过
deepin-launcher
的小窗口模式列表代码,deepin的平滑滚动策略存在缺陷,导致体验较差。这里我详细说明一下这一简单的问题,非deepin用户或开发者可以到此为止了。由代码中可以看到,首先他屏蔽了横向滑动的事件,这个主要应对触控板的一些问题。
offset
为滚动的距离,每次滚动之前先停止上次动画(如果还没有结束的话),然后在以当前位置为起始位置,以相对offset的位置为结束位置,这就会导致一个问题。假设有两个连续的滚动事件被触发,上边这个函数就会执行两次。这里会出现两种情况:
两次连续的事件时间间隔比较大,鼠标滚轮速度比较慢。
两次连续事件时间间隔很小,小于动画时长,鼠标滚动速度很快。
第一种情况下,deepin的这个方案并没有什么问题,两次动画之间互不干扰。但是第二种情况就会发现问题,假设动画时长为800ms,当第一次滚动事件触发后,随后800ms的时间中,滚动条将相应的向目标位置滚动,但是当第二次事件在第一次的动画还未结束时到来的话,第一次的动画将被打断,也就是只滚动了一部分就结束了,因此,当连续的快速滚动事件结束后,实际滚动的距离要远小于期望的距离。
这个问题在本文中的解决方案时建立一个目标位置的变量。此变量用于记录滚动所期望的位置,不会导致滚动失真。
大致如下:
设记录目标位置的变量为
a
,a的值将被初始化为滚动条当前的value,此后,当鼠标滚动事件被触发时,首先将a的值通过和滚动距离的计算变为新的位置,此时当前位置与a的值将不再相等,然后在通过动画将结束位置定为a。这样处理的好处,通过上边的方法分析如下:首先第一种情况是没有区别的,来看第二种。同样假设动画时方案长为800ms,当第一次滚动事件发生后,a将被计算为要滚动的目标位置,随后的800ms将是动画的执行过程,当这个过程还未结束时,第二次滚动又将a的值通过和滚动距离的计算,变为一个新的位置,再由动画去执行。这里注意,a在两次变化中,第一次的距离并未丢失,两次距离相加,当连续的快速滚动事件结束后,实际滚动的距离等于所期望的距离。
deepin那种方案所导致的现象
快速滚动滚轮并不能让列表的滚动速度便快,甚至还可能不如滚轮滚的慢一点。
滚动的动画将会在一些情况下看起来不流畅
希望deepin能采纳文中的方案。