Show time!
简单来说,就是一个轮播图。
切换的时候是有动画的。
点击下面的按钮可以切换动画。
图片可以是很多张很多张的,但显示在窗口上的只有三张,但它们的顺序是不会变的。
如果能直接有qml上面的pathview的组件能直接使用那就更好了,就不能自己敲widget了。
整体流程
首先,大概是这么一个窗口:
其中,灰色部分就是整个widget的大小,就是说leftprepare和rightprepare是在widget外的,就是准备着的。
左移和右移差不多,那只要明白左移一次的要点基本就差不多了:
动画
移动由qanimation实现,就是动画,动画说白了就是产生一堆间隔很小很小的数列设置进控件的属性,所以改变label的geometry就有了动画移动的效果。
位置
位置是先固定好的,由于五个label的geometry会改变,所以先定义五个rect记录着固定的位置
移动
重中之重,看起来再移动,其实并没有真正的移动。
一次左移,众所周知,就是left移到leftprepare,middle移到left,right移到left,rightprepare移到right,没错是这样,但如果想有第二次,第三次,第n次,就必须做一些顺序处理了,毕竟位置已经都变了。
哈哈哈但天才并不想处理label,处理的是图片的顺序。
上面 [ 位置 ] 的用法来了,简单的说,无论移动多少次,label们左移都是从left rect的位置移到leftprepare rect的位置,middle rect移到left rect…,移动负责的只是显示了移动的效果。
顺序
既然不处理控件移动后的顺序问题,还是得处理图片的顺序问题。加入从左到右插入了图片12345。
左移第一次,啥也不用动。
左移第二次开始,labelleft就要插入图片3了,图片顺序也就变成了23451。
换种说法,第一次左移,显示了图片2345的左移动画:
第二次左移则显示3451的左移动画: