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?
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();
PS: vérifiez aussi les exemples de Qt SDK. Ils sont vraiment là pour vous aider!
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
.
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.
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();