@@ -1,70 +1,71 | |||||
1 | #include "axisanimationitem_p.h" |
|
1 | #include "axisanimationitem_p.h" | |
2 | #include <QPropertyAnimation> |
|
2 | #include <QPropertyAnimation> | |
3 |
|
3 | |||
4 | Q_DECLARE_METATYPE(QVector<qreal>) |
|
4 | Q_DECLARE_METATYPE(QVector<qreal>) | |
5 |
|
5 | |||
6 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
6 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
7 |
|
7 | |||
8 | const static int duration = 500; |
|
8 | const static int duration = 500; | |
9 |
|
9 | |||
10 | AxisAnimationItem::AxisAnimationItem(AxisType type,QGraphicsItem* parent) : |
|
10 | AxisAnimationItem::AxisAnimationItem(AxisType type,QGraphicsItem* parent) : | |
11 | AxisItem(type,parent) |
|
11 | AxisItem(type,parent) | |
12 | { |
|
12 | { | |
13 | } |
|
13 | } | |
14 |
|
14 | |||
15 | AxisAnimationItem::~AxisAnimationItem() |
|
15 | AxisAnimationItem::~AxisAnimationItem() | |
16 | { |
|
16 | { | |
17 | } |
|
17 | } | |
18 |
|
18 | |||
19 | void AxisAnimationItem::updateItems(QVector<qreal>& vector1) |
|
19 | void AxisAnimationItem::updateItems(QVector<qreal>& vector1) | |
20 | { |
|
20 | { | |
21 | QVector<qreal> vector0 = vector1; |
|
21 | QVector<qreal> vector0 = vector1; | |
22 | calculateLayout(vector1); |
|
22 | calculateLayout(vector1); | |
23 | if(vector1.count()==0) return; |
|
23 | if(vector1.count()==0) return; | |
24 | vector0.resize(vector1.size()); |
|
24 | vector0.resize(vector1.size()); | |
25 |
|
25 | |||
26 | AxisAnimator *animation = new AxisAnimator(this); |
|
26 | AxisAnimator *animation = new AxisAnimator(this,this); | |
27 | animation->setDuration(duration); |
|
27 | animation->setDuration(duration); | |
28 | animation->setEasingCurve(QEasingCurve::InOutBack); |
|
28 | animation->setEasingCurve(QEasingCurve::InOutBack); | |
29 | animation->setKeyValueAt(0.0, qVariantFromValue(vector0)); |
|
29 | animation->setKeyValueAt(0.0, qVariantFromValue(vector0)); | |
30 | animation->setKeyValueAt(1.0, qVariantFromValue(vector1)); |
|
30 | animation->setKeyValueAt(1.0, qVariantFromValue(vector1)); | |
31 | animation->start(QAbstractAnimation::DeleteWhenStopped); |
|
31 | animation->start(QAbstractAnimation::DeleteWhenStopped); | |
32 | } |
|
32 | } | |
33 |
|
33 | |||
34 | void AxisAnimationItem::setLabelsAngle(int angle) |
|
34 | void AxisAnimationItem::setLabelsAngle(int angle) | |
35 | { |
|
35 | { | |
36 | AxisItem::setLabelsAngle(angle); |
|
36 | AxisItem::setLabelsAngle(angle); | |
37 | } |
|
37 | } | |
38 |
|
38 | |||
39 |
AxisAnimator::AxisAnimator(AxisItem *axis): |
|
39 | AxisAnimator::AxisAnimator(AxisItem *axis,QObject *parent): QVariantAnimation(parent), | |
|
40 | m_axis(axis) | |||
40 | { |
|
41 | { | |
41 | } |
|
42 | } | |
42 |
|
43 | |||
43 | AxisAnimator::~AxisAnimator() |
|
44 | AxisAnimator::~AxisAnimator() | |
44 | { |
|
45 | { | |
45 | } |
|
46 | } | |
46 |
|
47 | |||
47 | QVariant AxisAnimator::interpolated(const QVariant &start, const QVariant & end, qreal progress ) const |
|
48 | QVariant AxisAnimator::interpolated(const QVariant &start, const QVariant & end, qreal progress ) const | |
48 | { |
|
49 | { | |
49 | QVector<qreal> startVector = qVariantValue<QVector<qreal> >(start); |
|
50 | QVector<qreal> startVector = qVariantValue<QVector<qreal> >(start); | |
50 | QVector<qreal> endVecotr = qVariantValue<QVector<qreal> >(end); |
|
51 | QVector<qreal> endVecotr = qVariantValue<QVector<qreal> >(end); | |
51 | QVector<qreal> result; |
|
52 | QVector<qreal> result; | |
52 | Q_ASSERT(startVector.count() == endVecotr.count()); |
|
53 | Q_ASSERT(startVector.count() == endVecotr.count()); | |
53 |
|
54 | |||
54 | for(int i =0 ;i< startVector.count();i++){ |
|
55 | for(int i =0 ;i< startVector.count();i++){ | |
55 | qreal value = startVector[i] + ((endVecotr[i]- startVector[i]) * progress);//qBound(0.0, progress, 1.0)); |
|
56 | qreal value = startVector[i] + ((endVecotr[i]- startVector[i]) * progress);//qBound(0.0, progress, 1.0)); | |
56 | result << value; |
|
57 | result << value; | |
57 | } |
|
58 | } | |
58 | return qVariantFromValue(result); |
|
59 | return qVariantFromValue(result); | |
59 | } |
|
60 | } | |
60 |
|
61 | |||
61 |
|
62 | |||
62 | void AxisAnimator::updateCurrentValue (const QVariant & value ) |
|
63 | void AxisAnimator::updateCurrentValue (const QVariant & value ) | |
63 | { |
|
64 | { | |
64 | QVector<qreal> vector = qVariantValue<QVector<qreal> >(value); |
|
65 | QVector<qreal> vector = qVariantValue<QVector<qreal> >(value); | |
65 | m_axis->applyLayout(vector); |
|
66 | m_axis->applyLayout(vector); | |
66 | } |
|
67 | } | |
67 |
|
68 | |||
68 | #include "moc_axisanimationitem_p.cpp" |
|
69 | #include "moc_axisanimationitem_p.cpp" | |
69 |
|
70 | |||
70 | QTCOMMERCIALCHART_END_NAMESPACE |
|
71 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -1,44 +1,44 | |||||
1 | #ifndef AXISANIMATIONITEM_H_ |
|
1 | #ifndef AXISANIMATIONITEM_H_ | |
2 | #define AXISANIMATIONITEM_H_ |
|
2 | #define AXISANIMATIONITEM_H_ | |
3 |
|
3 | |||
4 | #include "domain_p.h" |
|
4 | #include "domain_p.h" | |
5 | #include "axisitem_p.h" |
|
5 | #include "axisitem_p.h" | |
6 | #include <QGraphicsItem> |
|
6 | #include <QGraphicsItem> | |
7 | #include <QVariantAnimation> |
|
7 | #include <QVariantAnimation> | |
8 |
|
8 | |||
9 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
9 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
10 |
|
10 | |||
11 | class QChartAxis; |
|
11 | class QChartAxis; | |
12 |
|
12 | |||
13 | class AxisAnimationItem : public AxisItem |
|
13 | class AxisAnimationItem : public AxisItem | |
14 | { |
|
14 | { | |
15 | Q_OBJECT |
|
15 | Q_OBJECT | |
16 |
|
16 | |||
17 | public: |
|
17 | public: | |
18 | AxisAnimationItem(AxisType type = X_AXIS,QGraphicsItem* parent = 0); |
|
18 | AxisAnimationItem(AxisType type = X_AXIS,QGraphicsItem* parent = 0); | |
19 | ~AxisAnimationItem(); |
|
19 | ~AxisAnimationItem(); | |
20 |
|
20 | |||
21 | void setLabelsAngle(int angle); |
|
21 | void setLabelsAngle(int angle); | |
22 |
|
22 | |||
23 | protected: |
|
23 | protected: | |
24 | void updateItems(QVector<qreal>& vector); |
|
24 | void updateItems(QVector<qreal>& vector); | |
25 |
|
25 | |||
26 | }; |
|
26 | }; | |
27 |
|
27 | |||
28 | class AxisAnimator: public QVariantAnimation |
|
28 | class AxisAnimator: public QVariantAnimation | |
29 | { |
|
29 | { | |
30 | public: |
|
30 | public: | |
31 | AxisAnimator(AxisItem *axis); |
|
31 | AxisAnimator(AxisItem *axis,QObject *parent = 0); | |
32 | virtual ~AxisAnimator(); |
|
32 | virtual ~AxisAnimator(); | |
33 | protected: |
|
33 | protected: | |
34 | virtual QVariant interpolated (const QVariant & from, const QVariant & to, qreal progress ) const; |
|
34 | virtual QVariant interpolated (const QVariant & from, const QVariant & to, qreal progress ) const; | |
35 | virtual void updateCurrentValue (const QVariant & value ); |
|
35 | virtual void updateCurrentValue (const QVariant & value ); | |
36 | private: |
|
36 | private: | |
37 | AxisItem* m_axis; |
|
37 | AxisItem* m_axis; | |
38 | }; |
|
38 | }; | |
39 |
|
39 | |||
40 | QTCOMMERCIALCHART_END_NAMESPACE |
|
40 | QTCOMMERCIALCHART_END_NAMESPACE | |
41 |
|
41 | |||
42 |
|
42 | |||
43 |
|
43 | |||
44 | #endif /* AXISITEM_H_ */ |
|
44 | #endif /* AXISITEM_H_ */ |
General Comments 0
You need to be logged in to leave comments.
Login now