在QGraphicsItemAnimation中缩放

时间:2012-06-18 08:30:35

标签: qt animation

我正在寻找一种正确的方法来实现“ScaleAnimation”。我的目的是为QImage制作动画:

    timeline = new QTimeLine(time);
    timeline->setFrameRange(0, 100);
    animation = new QGraphicsItemAnimation;

    QRectF rect = item->boundingRect();
    int h = rect.bottom() - rect.top();
    int w = rect.right() - rect.left();


    animation->setItem(item);
    animation->setTimeLine(timeline);


    for (int i = 0; i < 100; i++) {
            int x = w + (int)((float)w*(float)(i/100.0));
            qreal xx = (qreal)(x)/(qreal)w;
            int y = (h) + (int)((float)h*(float)(i/100.0));
            qreal yy = (qreal)(y)/(qreal)h;          
            animation->setScaleAt(i/100, xx, yy);
    }

似乎有效,但动画的起源似乎是(0, 0)。有没有办法在(w/2, h/2)中应用动画?是否有更好,更有效(或更正确)的方式来重写动画?我在Qt世界中退出了新手。

感谢您的耐心等待。

1 个答案:

答案 0 :(得分:0)

如果您正在使用QGraphicsPixmapItem,只需将其偏移设置为中点,并将其移动相同的量以抵消设置偏移的效果。

const QSizeF size = item->boundingRect().size()*0.5;
item->setOffset(size.width(), size.height());
item->moveBy(size.width(), size.height());