Qt Animation
У меня проблемы с пониманием того, как работает функция 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 ответ
Это связано с тем, что источник преобразования находится в верхнем левом углу элемента. Вместо этого вы должны использовать что-то вроде addEllipse(-50, -50, 100, 100), чтобы источник находился в центре. Конечно, вам нужно расположить предмет где-то там, где это имеет смысл.