Подтвердить что ты не робот

GIF анимация в Qt

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

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

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

4b9b3361

Ответ 1

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

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

My loading.gif Я взял из эту ссылку.


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

Ответ 2

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

Проблема

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

Решение

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

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

Ответ 3

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

google и Qt docs - ваш друг. Там даже есть example.

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

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

Ответ 4

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

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