Я использовал классы QGraphicsView
, QGraphicsScene
, чтобы показать изображение в виджетах вроде этого:
m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);
Как я могу показать анимацию .gif в той же сцене?
Я использовал классы QGraphicsView
, QGraphicsScene
, чтобы показать изображение в виджетах вроде этого:
m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);
Как я могу показать анимацию .gif в той же сцене?
Я не использую анимацию 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. Они действительно могут помочь!
Я помещаю это здесь, если кто-то, кроме меня, сталкивается с той же проблемой.
Проблема
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
.
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
. Вероятно, есть более простой/более короткий способ сделать это.
Укажите правильный путь ресурса, как показано ниже:
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();