Отображать статичные изображения в Qt-приложениях очень легко. Для этого подходит QLabel:
1 2 |
QPixmap pix( "/path/to/file" ); label->setPixmap( pix ); // label имеет тип QLabel* |
Вывести GIF-анимацию не намного сложнее. В этом нам поможет QMovie и все тот же QLabel:
1 2 3 |
QMovie movie( "/path/to/file" ); label->setMovie( &movie ); // label имеет тип QLabel* movie.start(); |
Обратите внимание на две особенности:
- В QLabel передается указатель на объект типа QMovie;
- GIF-анимация запускается явно вызовом start().
Создадим проект с применением QMovie. Типичное использование GIF-анимации заключается в создании индикаторов ожидания.
Заголовочный файл gifanimationdemowidget.h:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#ifndef GIFANIMATIONDEMOWIDGET_H #define GIFANIMATIONDEMOWIDGET_H #include <QWidget> #include <QMovie> namespace Ui { class GIFAnimationDemoWidget; } class GIFAnimationDemoWidget : public QWidget { Q_OBJECT public: explicit GIFAnimationDemoWidget( QWidget* parent = 0 ); ~GIFAnimationDemoWidget(); private: Ui::GIFAnimationDemoWidget* ui; QMovie m_movie; }; #endif // GIFANIMATIONDEMOWIDGET_H |
Файл реализации gifanimationdemowidget.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include "gifanimationdemowidget.h" #include "ui_gifanimationdemowidget.h" GIFAnimationDemoWidget::GIFAnimationDemoWidget( QWidget* parent ) : QWidget( parent ), ui( new Ui::GIFAnimationDemoWidget ), m_movie( ":/loading.gif" ) { ui->setupUi( this ); ui->lbMovie->setMovie( &m_movie ); connect( ui->bnStart, SIGNAL( clicked( bool ) ), &m_movie, SLOT( start() ) ); connect( ui->bnStop, SIGNAL( clicked( bool ) ), &m_movie, SLOT( stop() ) ); } GIFAnimationDemoWidget::~GIFAnimationDemoWidget() { delete ui; } |
Изображение loading.gif помещено в ресурсы приложения:
1 2 3 4 5 |
<RCC> <qresource prefix="/"> <file>loading.gif</file> </qresource> </RCC> |
Запуск и остановка анимации привязаны к нажатию кнопок Start и Stop через систему сигналов-слотов.