2009-05-28 4 views
2

Je n'arrive pas à comprendre comment fonctionne la fonction setScaleAt de QGraphicsItemAnimation. Voici le code que je utilise:Qt Animation

QGraphicsItem *item=scene.addEllipse(400, 300, 100, 100, QPen(), QBrush(Qt::SolidPattern)); 
    QTimeLine *timeline=new QTimeLine(3000); 
    timeline->setFrameRange(0, 100); 
    QGraphicsItemAnimation *animation=new QGraphicsItemAnimation; 
    animation->setItem(item); 
    animation->setTimeLine(timeline); 
    for (int i=0; i<100; i++) { 
     animation->setScaleAt(i/100.0, i/100.0, i/100.0); 
    } 
    connect(timeline, SIGNAL(valueChanged(qreal)), animation, SLOT(setStep(qreal))); 
    timeline->start(); 

Tout ce que je veux faire est d'afficher un point au milieu de l'écran, ont ensuite étendre à un cercle de plus de 3 secondes. Ce que ce code me donne est un point qui apparaît dans le coin supérieur gauche, puis se développe et se déplace simultanément au milieu. J'ai essayé de compenser en mettant la position à chaque étape, mais cela semble assez compliqué. Il doit y avoir une façon plus propre de faire cela.

De plus, l'élément d'origine est affiché pendant une fraction de seconde avant le début de l'animation, est-il possible de le masquer par défaut, puis de l'afficher pour l'animation?

Merci d'avance.

Répondre

3

Cela est dû au fait que l'origine de la transformation se trouve dans le coin supérieur gauche de l'élément. Vous devriez utiliser quelque chose comme addEllipse (-50, -50, 100, 100) pour que l'origine soit au centre. Bien sûr, vous devez placer l'élément quelque part où cela a du sens.

+0

Cela a fait l'affaire. Merci! – JCL