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?
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!
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
.
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.
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();