web-dev-qa-db-fra.com

Animation GIF dans Qt

J'ai utilisé les classes QGraphicsView, QGraphicsScene afin d'afficher une image dans un widget comme celui-ci:

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

Comment puis-je montrer une animation . Gif dans la même scène?

23
Narek

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

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

Ma loading.gif J'ai pris de ce lien.


PS: consultez également les exemples du Qt SDK. Ils peuvent vraiment aider!

73
mosg

Je mets cela ici au cas où quelqu'un d'autre que moi rencontre le même problème.

Problème

Le GIF ne se chargerait pas et isValid() renvoie 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 ce problème, j'ai dû mettre le plugin GIF de Qt qgif4.dll dans un dossier nommé imageformats à côté de mon exe pour pouvoir utiliser les GIF.

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

21
Adelost

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

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

PS: sauf si vous êtes en Chine, alors google n'est pas accessible, mais vous auriez des trucs 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 via QLabel::setMovie. Il y a probablement un moyen plus facile/plus court de le faire.

3
rubenvb

Donnez au chemin d'accès approprié des ressources le code ci-dessous

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
Subrata Das