效果图:
实现鼠标点击滑动切换页面,控件是在网上扒别人写好的,自己填了几个接口,颜色改了改。
这个是从之前的大作业中提取出来的,控件没有实际意义,只是为了演示滑动效果。
本案例QTimeLine使用流程:
- 初始化:new一个对象
QTimeLine(int duration = 1000, QObject * parent = 0)
//第一个参数设置的是持续时间,
//可以理解为一次完整改变所需要的周期时间
- 设置范围
void QTimeLine::setFrameRange(int startFrame, int endFrame)
//设置起始值和终止值,在本例中因为是切换整个屏幕,
//所以起始值设置为0,终止值设置为窗口的宽度
- 关联槽函数
connect(timeLine_move, SIGNAL(frameChanged(int)), this, SLOT(slot_timeLine(int)));
//注意:slot_timeLine是我自己实现的函数,可以换成其它的,
//frameChanged是QTimeLine的信号,在特定的间隔时定时发出
//发出时的参数是介于之前设置的范围之中的
- 开始QTimeLine
void QTimeLine::start()
//启动QTimeLine,QTimeLine会处于运行态,
//并在一定的间隔值内改变当前值(还有当前时间和frame,我不知道该如何理解)
//并且会发送frameChanged信号,直到到当前值到达设定的范围时停止
//可以在开始的时候设置方向,也就是说可以设置值的改变是 从起始值到终止值 还是终止值到起始值
- 注意:
在这个示例中滑动可能会出现多次滑动的情况,我的处理是如果QTimeLine已经在运行了,那么再滑动就直接不处理,所以用到了state函数,如果状态不是未运行或停止态则不予处理
State QTimeLine::state() const
//返回当前QTimeLine的运行状态。
//如果是未运行或者是停止时返回0
//如果是处于暂停状态则返回1
//如果是处于运行态则返回2
- 滑动事件捕捉方式
没有找到相关的事件,于是就自己实现了试试,实现流程如下:
重载mouseMoveEvent,记录每次按钮按下时的x坐标,然后在移动时判定移动时的x坐标是否大于按下时的坐标,如果大于就做窗口向右移动的处理,如果小于就做窗口向左移动的处理
下载链接