GIF анимация в Qt - PullRequest
       18

GIF анимация в Qt

23 голосов
/ 14 июля 2010

Я использовал QGraphicsView, QGraphicsScene классы, чтобы показать картинку в виджете, например:

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

Как я могу показать .gif анимацию в той же сцене?

Ответы [ 4 ]

68 голосов
/ 15 июля 2010

Я не использую GIF-анимацию с QGraphicsView или QGraphicsScene, я использую ее только в QDialog, но я думаю, что это то же самое, поэтому мой код:

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

Мой loading.gif Я взял с эту ссылку.


PS: также посмотрите примеры из Qt SDK. Они действительно могут помочь!

21 голосов
/ 17 февраля 2013

Я помещу это здесь на случай, если кто-то, кроме меня, столкнется с той же проблемой.

Проблема

GIF не загружается и isValid() возвращает false.

код

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

Решение

Чтобы решить эту проблему, мне пришлось поместить GIF-плагин Qt qgif4.dll в папку с именем imageformats рядом с моим exe-файлом, чтобы иметь возможность использовать GIF-файлы.

DLL можно найти под /plugins/imageformats/qgif4.dll.

3 голосов
/ 14 июля 2010

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

Google и Qt Docs - ваш друг.Там даже есть пример .

PS: если вы не в Китае, то Google недоступен, но у вас есть такие вещи, как Bing и doc.qt.io.com .

PS2: для более подробного ответа: вы можете использовать QGraphicsProxyWidget из QLabel, который имеет QMovie через QLabel::setMovie.Вероятно, есть более простой / короткий способ сделать это.

1 голос
/ 17 июля 2017

Укажите правильный путь к ресурсу, как показано ниже:

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