アニメーション可能なプロパティ
先の例では,
QVariantには,
表1 アニメーション対応のプロパティ一覧
メタタイプ | 実際の型 |
---|---|
QMetaType::Int | int |
QMetaType::Double | double |
QMetaType::Float | float |
QMetaType::QLine | QLine |
QMetaType::QLineF | QLineF |
QMetaType::QPoint | QPoint |
QMetaType::QSize | QSize |
QMetaType::QSizeF | QSizeF |
QMetaType::QRect | QRect |
QMetaType::QRectF | QRectF |
したがってQWidgetでは,
キーバリューによるアニメーション速度の変更
一定の速度でラベルを移動させるのではなく,
リスト2 ラベル移動速度を変化させる場合の変更点
68: d->labelAnimation = new QPropertyAnimation( movableLabel, "pos", this );
69: d->labelAnimation->setDuration( 5 * 1000 );
70: int movableLabelStartX = d->horizontalOffset;
71: int movableLabelEndX = width() - movableLabel->sizeHint().width() - d->horizontalOffset;
72: int movableLabelInterimX = movableLabelStartX + ( movableLabelEndX - movableLabelStartX ) * 9 / 10;
73: d->labelAnimation->setKeyValueAt( 0.0, QPoint( movableLabelStartX, movableLabelY ) );
74: d->labelAnimation->setKeyValueAt( 0.5, QPoint( movableLabelInterimX, movableLabelY ) );
75: d->labelAnimation->setKeyValueAt( 1.0, QPoint( movableLabelEndX, movableLabelY ) );
setStartValue()とsetEndValue()の代わりにsetKeyValueAt()を用いて,
この修正をしたサンプルプログラムを動作させると,
移動速度が変化するアニメーション
イージングによるアニメーション速度の変更
イージングとは,
リスト3 イージングによる速度コントロールを可能にさせる
68: d->labelAnimation = new QPropertyAnimation( movableLabel, "pos", this );
69: d->labelAnimation->setDuration( 5 * 1000 );
70: int movableLabelStartX = d->horizontalOffset;
71: int movableLabelEndX = width() - movableLabel->sizeHint().width() - d->horizontalOffset;
72: d->labelAnimation->setStartValue( QPoint( movableLabelStartX, movableLabelY ) );
73: d->labelAnimation->setEndValue( QPoint( movableLabelEndX, movableLabelY ) );
74: d->labelAnimation->setEasingCurve( QEasingCurve::OutBounce );
最初のサンプルプログラム
イージングを使うには,
Qtでは,
表2 イージングの種類
加速と減速方法 | |
---|---|
In | 加速 |
Out | 減速 |
InOut | 加速後に減速 |
OutIn | 減速後に加速 |
補間曲線 | |
Sine | 正弦曲線に沿う |
Quad | 2 次曲線に沿う |
Cubic | 3 次曲線に沿う |
Quart | 4 次曲線に沿う |
Quint | 5 次曲線に沿う |
Expo | 指数曲線に沿う |
Circ | 円弧に沿う |
Elastic | 弾む動き |
Back | 行き過ぎて戻る動き |
Bounce | 跳ねる動き |
Qtで用意されているイージングには,