QGraphicsItemを正常にアニメーション化するクラスがあります。
class LineAnimator : public QAbstractAnimation
{
public:
LineAnimator(QPointF start, QPointF end, QGraphicsItem* shape, QObject* parent=0) :
QAbstractAnimation(parent), mShape(shape)
{
path.moveTo(start);
path.lineTo(end);
}
virtual int duration() const { return 1000; }
virtual void updateCurrentTime(int currentTime)
{
mShape->setPos( path.pointAtPercent(qreal(currentTime) / 1000) );
}
private:
QPainterPath path;
QGraphicsItem* mShape;
};
QGraphicsItemが動いていないとき、その状態が s1になるように、s1 と s2 という2 つのQStatesを追加できるクラスを変更したいと考えています。状態が s2 に変わる間、定義済みのアニメーション クラスに移動する必要があります。最後に、状態を s2 に変更する必要があります。以下のコードでこれを実装しようとしましたが、うまくいきません。理由を説明できますか?
QGraphicsScene* scene = new QGraphicsScene(0, 0, 650, 400);
QGraphicsView *view = new QGraphicsView(scene);
QGrapgicsSimpleText* digit_1 = new QGrapgicsSimpleText;
digit_1->setText(QString::number(1));
scene->addItem(digit_1);
LineAnimator* lineAnimator = new LineAnimator(QPointF(50, 50),
QPointF(250, 50),
digit_1);
//-----------------------------
lineAnimator->setLoopCount(2);
//-----------------------------
QLable* lbl = new QLabel("State machine is not started.");
QStateMachine* machine = new QStateMachine();
QState* s1 = new QState(machine);
QState* s2 = new QState(machine);
machine->addState(s1);
machine->addState(s2);
machine->setInitialState(s1);
s1->assignProperty(lbl, "text", "State 1");
s2->assignProperty(lbl, "text", "State 2");
QAbstractTransition* t1 = s1->addTransition(lineAnimator, SIGNAL(finished()), s2);
t1->addAnimation(lineAnimator);
lbl->show();
machine->start();
lineAnimator->stat();
view->show();
ありがとう。