2010-07-14 40 views
20

he utilizado QGraphicsView, QGraphicsScene clases con el fin de mostrar una imagen en un widget de la siguiente manera:animación GIF en Qt

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

cómo puedo mostrar .gif animación en la misma escena?

Respuesta

61

No consumo animación GIF con QGraphicsView o QGraphicsScene, lo uso sólo en QDialog, pero yo creo que es lo mismo, por lo que aquí es mi código:

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

Mi loading.gif tomé de this enlazar.


PD: también verifique los ejemplos de Qt SDK. ¡Realmente pueden ayudar!

+7

Si alguien le pregunta ¿cuánto es 5x5 se dice: "No preguntar cuánto es 5x5, es mejor preguntar cuánto es 2x2" ? Y tu respondes: "2x2 = 4"? – Narek

+10

No, digo que quizás 2x2 = 4 ayudará a obtener 25 de 5x5 ... – mosg

+0

Sí, aquí la misma historia! Me sugieres que calcule 5x5 sabiendo 2x2 = 4 :))). Quiero agradecerle por su ayuda, pero lo que dice que sabía, quería realizar la tarea como lo pedí. ¿Puede ser que me ayudes a hacer esto usando las clases QGraphicsView y QGraphicsScene? O si dices que es imposible con estas clases, ¡también sería una respuesta! – Narek

4

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

google docs y Qt son de su amigo. Incluso hay un example.

PD: a menos que esté en China, entonces google no es accesible, pero tendría cosas como Bing y doc.qt.io.com.

PS2: por un poco más en profundidad la respuesta: se puede utilizar un QGraphicsProxyWidget de un QLabel que tiene una QMovie través QLabel::setMovie. Probablemente haya una manera más fácil/más corta de hacerlo.

15

Pongo esto aquí en caso de que alguien que no sea yo tenga el mismo problema.

Problema

El GIF no sería cargar y vuelve isValid()false.

Código

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

Solución

Para solucionar el problema que tenía que poner GIF-plugin de Qt qgif4.dll en una carpeta denominada imageformats al lado de mi exe para poder utilizar archivos GIF.

El dll se puede encontrar en /plugins/imageformats/qgif4.dll.

+1

'isValid()' es realmente útil para la depuración, gracias, +1 para eso. – TranslucentCloud

0

Dale la ruta correcta de la mirada de los recursos como de la siguiente código

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(); 
Cuestiones relacionadas