custompropertyanimation.h Example File
demos/sub-attaq/custompropertyanimation.h
#ifndef CUSTOMPROPERTYANIMATION_H
#define CUSTOMPROPERTYANIMATION_H
#include <QtCore/qvariantanimation.h>
class QGraphicsItem;
struct AbstractProperty
{
virtual QVariant read() const = 0;
virtual void write(const QVariant &value) = 0;
};
class CustomPropertyAnimation : public QVariantAnimation
{
Q_OBJECT
template <typename Target, typename T, typename T2 = T>
class MemberFunctionProperty : public AbstractProperty
{
public:
typedef T (Target::*Getter)(void) const;
typedef void (Target::*Setter)(T2);
MemberFunctionProperty(Target* target, Getter getter, Setter setter)
: m_target(target), m_getter(getter), m_setter(setter) {}
virtual void write(const QVariant &value)
{
if (m_setter) (m_target->*m_setter)(qVariantValue<T>(value));
}
virtual QVariant read() const
{
if (m_getter) return qVariantFromValue<T>((m_target->*m_getter)());
return QVariant();
}
private:
Target *m_target;
Getter m_getter;
Setter m_setter;
};
public:
CustomPropertyAnimation(QObject *parent = 0);
~CustomPropertyAnimation();
template<class Target, typename T>
void setMemberFunctions(Target* target, T (Target::*getter)() const, void (Target::*setter)(const T& ))
{
setProperty(new MemberFunctionProperty<Target, T, const T&>(target, getter, setter));
}
template<class Target, typename T>
void setMemberFunctions(Target* target, T (Target::*getter)() const, void (Target::*setter)(T))
{
setProperty(new MemberFunctionProperty<Target, T>(target, getter, setter));
}
void updateCurrentValue(const QVariant &value);
void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
void setProperty(AbstractProperty *animProp);
private:
Q_DISABLE_COPY(CustomPropertyAnimation);
AbstractProperty *animProp;
};
#endif
| Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Trademarks |
Qt 4.6.0-tp1 |