2010-07-14 149 views
20

我用QGraphicsViewQGraphicsScene班,以示在這樣的小部件的照片:GIF動畫Qt中

m_Scene->addPixmap(QPixmap(fileName)); 
m_View->setScene(m_Scene); 

如何,我可以告訴.gif注意動畫在同一場景?

回答

61

我不使用GIF動畫與QGraphicsViewQGraphicsScene,我用它只有在QDialog,但我認爲這是同樣的東西,所以這裏是我的代碼:

QMovie *movie = new QMovie(":/images/other/images/16x16/loading.gif"); 
QLabel *processLabel = new QLabel(this); 
processLabel->setMovie(movie); 
movie->start(); 

loading.gif我從this了鏈接。


PS:同時檢查Qt SDK的例子。他們真的可以幫助!

+7

如果有人問你多少5x5的你說:「不要問多少是5x5的,你最好問有多少是2×2」 ?你回答:「2x2 = 4」? – Narek 2010-07-15 07:31:29

+10

不,我說也許2x2 = 4將有助於從5x5獲得25 ... – mosg 2010-07-15 07:43:45

+0

是的,這裏是同樣的故事!你建議我通過知道2x2 = 4 :))來計算5x5)。我想說謝謝你的幫助,但是你說我知道,我想按照我的要求完成任務。可能你可以通過使用QGraphicsView和QGraphicsScene類來幫助我做到這一點?或者如果你說這些類是不可能的,那麼它也是一個答案! – Narek 2010-07-15 08:29:02

4

http://doc.qt.io/qt-5/qmovie.html

谷歌和Qt文檔是你的朋友。甚至有一個example。 PS:除非你在中國,否則谷歌是無法訪問的,但你會擁有Bing和doc.qt.io.com之類的東西。

PS2:稍微深入一點的回答:您可以使用的QLabel,它的QMovie通過QLabel::setMovie。有可能是一個更簡單/更短的方式來做到這一點。

15

我把這個放在這裏以防別人以外的人遇到同樣的問題。

問題

的GIF將不會加載和isValid()回報false

代碼

// Load animated GIF 
QMovie* movie = new QMovie("foo.gif"); 

// Make sure the GIF was loaded correctly 
if (!movie->isValid()) 
{ 
    // Something went wrong :(
} 

// Play GIF 
QLabel* label = new QLabel(this); 
label->setMovie(movie); 
movie->start(); 

解決方案

爲了解決這個問題,我不得不把Qt的GIF,插件qgif4.dll名爲imageformats我旁邊的EXE文件夾中,以便能夠使用GIF格式。

該DLL可以在 /plugins/imageformats/qgif4.dll找到。

+1

'isValid()'對於調試非常有幫助,謝謝+1。 – TranslucentCloud 2017-01-07 18:08:08

0

給資源的樣子正確的路徑類似如下的代碼

QMovie *movie=new QMovie(":/images/foo.gif"); 
if (!movie->isValid()) 
    { 
    // Something went wrong :(
    } 

// Play GIF 
label=new QLabel(this); 
label->setGeometry(115,60,128,128); 
label->setMovie(movie); 
movie->start();