I have used QGraphicsView
, QGraphicsScene
classes in order to show a picture in a widget like this:
m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);
How I can show .gif animation in the same scene?
I have used QGraphicsView
, QGraphicsScene
classes in order to show a picture in a widget like this:
m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);
How I can show .gif animation in the same scene?
I don't use GIF animation with QGraphicsView
or QGraphicsScene
, I use it only in QDialog
, but I think it's the same stuff, so here is my code:
QMovie *movie = new QMovie(":/images/other/images/16x16/loading.gif");
QLabel *processLabel = new QLabel(this);
processLabel->setMovie(movie);
movie->start();
My loading.gif
I took from this link.
PS: also check the examples from Qt SDK. They are really can help!
QGraphicsView
class supports GIF animation. But still you could use another methods, like to create another QThread
which would just show at the top of your main window GIF animation, while you app load scene or what ever... Oh, or it's 3x3? –
Plight I put this here in case someone other than me runs into the same problem.
Problem
The GIF would not load and isValid()
returns 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
To solve this, I had to put Qt's GIF-plugin qgif4.dll
in a folder named imageformats
next to my exe to be able to use GIFs.
The dll can be found under
/plugins/imageformats/qgif4.dll
.
isValid()
is really helpful for debugging, thanks, +1 for that. –
Tabulator http://doc.qt.io/qt-5/qmovie.html
google and Qt docs are your friend. There's even have an example.
PS: unless you're in China, then google is unaccessible, but you'd have stuff like Bing and doc.qt.io.com.
PS2: for a little more in-depth answer: you can use a QGraphicsProxyWidget
of a QLabel
which has a QMovie
via QLabel::setMovie
. There's probably an easier/shorter way to do it.
Give the proper path of resource look like as below 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();
Try with proper image path:
QMovie *movie = new QMovie(":/images/mygif.gif");
movie->setVisible(true);
QLabel *processLabel = new QLabel(this);
processLabel->setGeometry(200,150,180,100);
processLabel->setVisible(true);
processLabel->setMovie(movie);
movie->start();
© 2022 - 2024 — McMap. All rights reserved.