2012-06-18 4 views
2

"ScaleAnimation"을 내포하는 적절한 방법을 찾고있었습니다. 내 목적은 QImage 애니메이션을하는 것입니다QGraphicsItemAnimation에서의 스케일링

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 세계에서 뉴비를 그만 뒀다.

양해 해 주셔서 감사합니다.

답변

0

QGraphicsPixmapItem을 사용하는 경우 해당 오프셋을 중간 점으로 설정하고 오프셋만큼 설정 한 효과만큼 카운터를 이동하면됩니다.

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

사실이 아닙니다. 애니메이션이 적용되는 지점이 아닌 항목을 이동합니다. – Blackbelt

+0

시도해 보셨습니까? 애니메이션은 위치 (0,0) 주위로 비례합니다. 0,0이 가운데에 오게되면 괜찮을 것입니다. 그냥 밖으로 시도하고 볼 수 있습니다. –

+0

예. 내 센터가 w/2, h/2입니다. – Blackbelt