Animation GIF en Qt

j'ai utilisé QGraphicsView,QGraphicsScene classes afin de montrer une image dans un widget comme ceci:

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

Comment je peux afficher .gif animation dans la même scène?

21
demandé sur Angie Quijano 2010-07-14 20:17:18

4 réponses

Je n'utilise pas l'animation GIF avec QGraphicsView ou QGraphicsScene, je l'utilise seulement dans QDialog, mais je pense que c'est la même chose, donc voici mon code:

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

Mon loading.gif j'ai lien.


PS: vérifiez aussi les exemples de Qt SDK. Ils sont vraiment là pour vous aider!

65
répondu mosg 2014-01-23 14:49:01

j'ai mis ça ici au cas où quelqu'un d'autre que moi s'exécute dans le même problème.

Problème

le GIF ne se chargerait pas et isValid() retourne false.

Code

// 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(); 

Solution

pour résoudre cela, j'ai dû mettre le GIF-plugin de Qt qgif4.dll dans un dossier nommé imageformats à côté de mon exe pour pouvoir utiliser des GIF.

la dll se trouve sous /plugins/imageformats/qgif4.dll.

18
répondu Adelost 2014-06-02 14:28:33

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

google et Qt docs sont vos amis. Il y a même un exemple.

PS: sauf si vous êtes en Chine, alors google est irresponsable, mais vous auriez des choses comme Bing et doc.qt.io.com.

PS2: pour une réponse un peu plus approfondie: vous pouvez utiliser un QGraphicsProxyWidget d'un QLabel qui a un QMovie par QLabel::setMovie. Il y a probablement un moyen plus simple/plus court de le faire.

4
répondu rubenvb 2015-11-04 08:41:15

donnez le bon chemin de la ressource ressemblent comme ci-dessous le code

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();
1
répondu Subrata Das 2017-07-17 09:07:27