2009-05-28 81 views
2

我無法理解QGraphicsItemAnimation的setScaleAt函數的工作原理。下面是我使用的代碼:Qt動畫

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秒內擴大到了一圈。這段代碼給我的是一個出現在左上角的點,然後增長並同時移動到中間。我試圖通過設定每一步的位置來進行補償,但這似乎相當複雜。有一個更乾淨的方式來做到這一點。

此外,原始項目在動畫開始之前顯示爲一秒,有沒有什麼辦法可以隱藏它,然後顯示動畫?

在此先感謝。

回答

3

這是因爲轉換的原點位於項目的左上角。你應該使用類似addEllipse(-50,-50,100,100)的東西,以便原點位於中心。當然,你需要將物品放置在有意義的地方。

+0

這樣做。謝謝! – JCL 2009-05-28 14:24:57