Go to the
documentation of this file.
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef QANIMATION_H
00043 #define QANIMATION_H
00044
00045 #include <QtCore/qeasingcurve.h>
00046 #include <QtCore/qabstractanimation.h>
00047 #include <QtCore/qvector.h>
00048 #include <QtCore/qvariant.h>
00049 #include <QtCore/qpair.h>
00050
00051 QT_BEGIN_HEADER
00052
00053 QT_BEGIN_NAMESPACE
00054
00055 QT_MODULE(Core)
00056
00057 #ifndef QT_NO_ANIMATION
00058
00059 class QVariantAnimationPrivate;
00060 class Q_CORE_EXPORT QVariantAnimation : public QAbstractAnimation
00061 {
00062 Q_OBJECT
00063 Q_PROPERTY(QVariant startValue READ startValue WRITE setStartValue)
00064 Q_PROPERTY(QVariant endValue READ endValue WRITE setEndValue)
00065 Q_PROPERTY(QVariant currentValue READ currentValue NOTIFY valueChanged)
00066 Q_PROPERTY(int duration READ duration WRITE setDuration)
00067 Q_PROPERTY(QEasingCurve easingCurve READ easingCurve WRITE setEasingCurve)
00068
00069 public:
00070 typedef QPair<qreal, QVariant> KeyValue;
00071 typedef QVector<KeyValue> KeyValues;
00072
00073 QVariantAnimation(QObject *parent = 0);
00074 ~QVariantAnimation();
00075
00076 QVariant startValue() const;
00077 void setStartValue(const QVariant &value);
00078
00079 QVariant endValue() const;
00080 void setEndValue(const QVariant &value);
00081
00082 QVariant keyValueAt(qreal step) const;
00083 void setKeyValueAt(qreal step, const QVariant &value);
00084
00085 KeyValues keyValues() const;
00086 void setKeyValues(const KeyValues &values);
00087
00088 QVariant currentValue() const;
00089
00090 int duration() const;
00091 void setDuration(int msecs);
00092
00093 QEasingCurve easingCurve() const;
00094 void setEasingCurve(const QEasingCurve &easing);
00095
00096 typedef QVariant (*Interpolator)(const void *from, const void *to, qreal progress);
00097
00098 Q_SIGNALS:
00099 void valueChanged(const QVariant &value);
00100
00101 protected:
00102 QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent = 0);
00103 bool event(QEvent *event);
00104
00105 void updateCurrentTime(int);
00106 void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
00107
00108 virtual void updateCurrentValue(const QVariant &value) = 0;
00109 virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const;
00110
00111 private:
00112 template <typename T> friend void qRegisterAnimationInterpolator(QVariant (*func)(const T &, const T &, qreal));
00113 static void registerInterpolator(Interpolator func, int interpolationType);
00114
00115 Q_DISABLE_COPY(QVariantAnimation)
00116 Q_DECLARE_PRIVATE(QVariantAnimation)
00117 };
00118
00119 template <typename T>
00120 void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to, qreal progress)) {
00121 QVariantAnimation::registerInterpolator(reinterpret_cast<QVariantAnimation::Interpolator>(func), qMetaTypeId<T>());
00122 }
00123
00124 #endif //QT_NO_ANIMATION
00125
00126 QT_END_NAMESPACE
00127
00128 QT_END_HEADER
00129
00130 #endif //QANIMATION_H