You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.7 KiB
61 lines
1.7 KiB
#ifndef ANIMATIONSTACKEDWIDGET_H
|
|
#define ANIMATIONSTACKEDWIDGET_H
|
|
|
|
#include <QPainter>
|
|
#include <QVariant>
|
|
#include <QMouseEvent>
|
|
#include <QStackedWidget>
|
|
#include <QPropertyAnimation>
|
|
|
|
class AnimationStackedWidget : public QStackedWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum AnimationType
|
|
{
|
|
TopToBottom,
|
|
BottomToTop,
|
|
LeftToRight,
|
|
RightToLeft
|
|
};
|
|
|
|
explicit AnimationStackedWidget(QWidget *parent = 0);
|
|
virtual ~AnimationStackedWidget();
|
|
|
|
virtual void mousePressEvent(QMouseEvent *event);
|
|
virtual void mouseMoveEvent(QMouseEvent *event);
|
|
virtual void mouseReleaseEvent(QMouseEvent *event);
|
|
|
|
void start(int index);
|
|
void setNext(bool);
|
|
void setLength(int length, AnimationType type);
|
|
void setWidgets(QList<QWidget*>);
|
|
void setPos(QList<QPoint>);
|
|
private slots:
|
|
void valueChanged(const QVariant &value);
|
|
void animationFinished();
|
|
signals:
|
|
void sigGetWidgets(int);
|
|
protected:
|
|
virtual void paintEvent(QPaintEvent *event);
|
|
void renderPreviousWidget(QPainter &painter, QTransform &transform);
|
|
void renderCurrentWidget(QPainter &painter, QTransform &transform);
|
|
private:
|
|
bool m_isAnimating;//动画正在运行
|
|
float m_currentValue;//动画启动变化的值
|
|
int m_currentIndex, m_previousIndex;//当前、前一个窗口索引
|
|
int m_iWidth;//窗口宽度
|
|
bool m_bRight;//是否向右移动
|
|
AnimationType m_type;
|
|
QPropertyAnimation *m_animation;//移动动画
|
|
QPoint m_startPos;//鼠标按下坐标
|
|
QList<QWidget*> m_lstWs;//小窗口地址
|
|
QList<QPoint> m_lstPos;//保存小窗口坐标
|
|
bool m_bUpdate;//是否可以进行重绘事件
|
|
bool m_Oncepress;//每当鼠标按下时进行界面索引更新
|
|
bool m_canMove;//鼠标按下时如果动画还未结束则鼠标移动和释放无效
|
|
int m_savePreviousIndex;//保存鼠标移动时上一个窗口索引
|
|
};
|
|
|
|
#endif // ANIMATIONSTACKEDWIDGET_H
|