Qt Animation - PullRequest
       15

Qt Animation

2 голосов
/ 28 мая 2009

Мне сложно понять, как работает функция setScaleAt в QGraphicsItemAnimation. Вот код, который я использую:

    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();

Все, что я хочу сделать, это отобразить точку в центре экрана, а затем развернуть ее до круга в течение 3 секунд. Этот код дает мне точку, которая появляется в левом верхнем углу, затем растет и одновременно перемещается в середину. Я пытался компенсировать это, устанавливая позицию на каждом шаге, но это кажется довольно запутанным. Должен быть более чистый способ сделать это.

Кроме того, оригинальный элемент отображается в течение доли секунды перед началом анимации, есть ли способ скрыть его по умолчанию, а затем отобразить для анимации?

Заранее спасибо.

1 Ответ

3 голосов
/ 28 мая 2009

Это потому, что источник преобразования находится в верхнем левом углу элемента. Вместо этого вы должны использовать что-то вроде addEllipse (-50, -50, 100, 100), чтобы источник находился в центре. Конечно, вам нужно расположить предмет где-нибудь, где это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...