Анимированный QGraphicsItem с пунктирной ручкой - PullRequest
1 голос
/ 12 декабря 2010

Я хотел бы создать вращающийся круг, нарисованный пером Qt:DotLine, с использованием Graphics View Framework. Используя QGraphicsItemAnimation, я могу вращать другие фигуры, но не круг. Программа ниже демонстрирует проблему: вместо прямоугольника и круга, вращающегося вместе, круг вращается вокруг, в то время как прямоугольник вращается изящно.

alt text

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsItem> 
#include <QTimeLine>
#include <QGraphicsItemAnimation>

QRectF rect (int r)
{
    return QRectF (-r, -r, r * 2, r * 2);
}

void setupRot (QTimeLine *timeline, QGraphicsItem *item)
{
    QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
    animation->setItem(item);
    animation->setTimeLine(timeline);
    animation->setRotationAt (1, 360);

    QObject::connect (timeline, SIGNAL(finished()), animation, SLOT(deleteLater()));
}

int main(int argc, char *argv[])
{
    QApplication app (argc, argv);

    QGraphicsScene scene;

    QTimeLine *timeline = new QTimeLine;    
    timeline->setDuration (3000);
    timeline->setCurveShape (QTimeLine::LinearCurve);
    QObject::connect (timeline, SIGNAL(finished()), timeline, SLOT(deleteLater()));

    setupRot (timeline, scene.addEllipse (rect (50), QPen (QBrush (QColor ("blue")), 8, Qt::DotLine)));
    setupRot (timeline, scene.addRect (rect (60)));
    scene.addEllipse (rect (40), QPen (QBrush (QColor ("red")), 8));    

    scene.setSceneRect (-100, -100, 200, 200);    
    QGraphicsView view (&scene);    
    view.show ();    
    timeline->setLoopCount (0);
    timeline->start(); 
    return app.exec ();
}

p.s .: В Интернете я нашел пример кода, где люди вручную создают промежуточные шаги анимации, например:

const int steps = 100;
for (int i = 0; i < steps; ++i)
    animation->setRotationAt (i / (float)steps, 360 / (float)steps * i);

Является ли это просто признаком того, что люди не понимают концепцию интерполяции, или есть какое-то преимущество в установке (казалось бы, лишних) контрольных точек?

1 Ответ

0 голосов
/ 14 декабря 2010

Какая версия / платформа?Если я запускаю ваш код как есть (или замедляюсь в 2 раза), вращение пунктирной окружности выглядит так же хорошо, как прямоугольник в Windows с Qt 4.7.

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