为了实现封装QWidget及其子类界面切换动画流程,满足开发过程中一键套用即可满足不同界面切换的效果,先展示切换效果:
其中包含库的封装,动画算法实现(需要持续新增)
对QWidget及QStatckWidget等类封装,便于动画接口调用等
先展示部分代码:
#ifndef ANIMATIONSTACKEDWIDGET_H
#define ANIMATIONSTACKEDWIDGET_H
#include <QStackedWidget>
#include <QVariant>
class QPropertyAnimation;
class AnimationStackedWidget : public QStackedWidget
{
Q_OBJECT
public:
explicit AnimationStackedWidget(QWidget *parent = 0);
~AnimationStackedWidget();
protected:
void paintEvent(QPaintEvent *);
public slots:
//前一页
void next();
//下一页
void forward();
void onAnimaFinish();
private:
void initWidgetsSize();
private:
bool _isAnimation; //是否正在动画
int _widgetCount; //保存当前StackWidget里面的子成员数
int _nextIndex; //下一个要切换的索引
bool _next;
int _m_currenAnimationType;
};
#endif // ANIMATIONSTACKEDWIDGET_H
AnimationStackedWidget 继承QStackedWidget,其中调用动画封装好的SDK即可实现相关动画。需要处理的无非就是paintevent函数
void AnimationStackedWidget::paintEvent(QPaintEvent *e)
{
if( _isAnimation )
{
QPainter paint(this);
//绘制下一个widget
AnimationMin->doAnimationFunctionNext( _next,paint );
//绘制当前Widget
AnimationMin->doAnimationFunctionCur( _next,paint );
}
}