Qt实现窗口关闭动画效果
2016-07-24 21:41
991 查看
现在很多软件在窗口状态切换的时候都会带那么一些小动画,看起来还挺酷的。比如程序退出的时候,有些软件会展现一个 窗口合拢的效果;比如QQ贴边隐藏、展现会有一个滑出滑入的动画效果,如果要我们自己实现也可以,就是动态改变窗口大小和位置嘛,但效率如何就不敢保证啦。还好Qt早就为我们准备了这么一个动画框架:QAbstractAnimation.
这个抽象类被 QAnimationGroup, QPauseAnimation, and QVariantAnimation这3个类继承,第一个主要是完成动画的并行播放,第二个是为并行播放提供单个动画的暂停,第三个是提供任意Variant类型的动画效果,它被QPropertyAnimation继承。完成窗口关闭动画效果只要用这个类就行了。
下面说一下实现流程:
首先当窗口关闭的时候会接收到一个closeEvent,当我们截获到这个closeEvent的时候就要播放关闭动画,当动画播放完毕,我们就关闭窗口,代码如下:
第一行是为了防止窗口设置了最小值,改变不了大小!这要注意一下!
我把playCloseAnimation()弄成了虚函数,这样继承这个类的时候只要重新实现虚函数就可以完成不一样的关闭动画,无需再重写closeEvent().
但是注意了,这段代码仅对无边框的窗口有效,如果你的窗口不是无边框的那么需要改变的是frameGeometry属性,但是这个属性只有读函数,没有写函数,你必须自己实现一个写函数,然后利用Q_Property宏声明一下才行,详细的请查询 Q_Property System
这个抽象类被 QAnimationGroup, QPauseAnimation, and QVariantAnimation这3个类继承,第一个主要是完成动画的并行播放,第二个是为并行播放提供单个动画的暂停,第三个是提供任意Variant类型的动画效果,它被QPropertyAnimation继承。完成窗口关闭动画效果只要用这个类就行了。
下面说一下实现流程:
首先当窗口关闭的时候会接收到一个closeEvent,当我们截获到这个closeEvent的时候就要播放关闭动画,当动画播放完毕,我们就关闭窗口,代码如下:
void StyledWindow::playCloseAnimation() { setMinimumSize(0,0); QPropertyAnimation* closeAnimation = new QPropertyAnimation(this,"geometry"); closeAnimation->setStartValue(geometry()); closeAnimation->setEndValue(QRect(geometry().x(),geometry().y()+height()/2,width(),0)); closeAnimation->setDuration(300); closeAnimationState = hasplayed; connect(closeAnimation,SIGNAL(finished()),this,SLOT(close())); closeAnimation->start(QAbstractAnimation::DeleteWhenStopped); } void StyledWindow::closeEvent(QCloseEvent *event) { if(isPlayCloseAnimation && closeAnimationState == notplay){ playCloseAnimation(); event->ignore(); } else{ event->accept(); } }
第一行是为了防止窗口设置了最小值,改变不了大小!这要注意一下!
我把playCloseAnimation()弄成了虚函数,这样继承这个类的时候只要重新实现虚函数就可以完成不一样的关闭动画,无需再重写closeEvent().
但是注意了,这段代码仅对无边框的窗口有效,如果你的窗口不是无边框的那么需要改变的是frameGeometry属性,但是这个属性只有读函数,没有写函数,你必须自己实现一个写函数,然后利用Q_Property宏声明一下才行,详细的请查询 Q_Property System
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- 基于javascript实现漂亮的页面过渡动画效果附源码下载
- js实现按钮颜色渐变动画效果
- 超赞的jQuery图片滑块动画特效代码汇总
- jQuery实现连续动画效果实例分析
- 利用jquery制作滚动到指定位置触发动画