Все видели в интернете красивые анимированные изображения. Их можно скачать на свой компьютер качестве файла с расширением gif. Возникает вопрос — можно ли использовать разместить эти картинки в своих программах? Можно, отвечает библиотека Qt. Рассмотрим, как это сделать.
Создаём новый проект типа Qt widgets. Добавляем объект класса QMovie для воспроизведения анимации. На форме размещаем объект класса QLabel. В конструкторе приложения указываем имя файла для объекта, воспроизводящего анимацию:
mo.setFileName(":/ico/loader.gif");
Передаём указатель на этот объект в label:
ui->label->setMovie(&mo);
Запускаем воспроизведение анимации:
mo.start();
Файл widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QMovie> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void setSpeedMovie(int); void setSizeMovie(int); private: Ui::Widget *ui; QMovie mo; double m; }; #endif // WIDGET_H
В классе QMovie предусмотрены функции для управления скоростью воспроизведения setSpeed() и масштабом setScaledSize(). Первой функции необходимо передать относительную скорость воспроизведения в процентах (100 — номинальная скорость, 200 — удвоенная), второй размеры прямоугольника, в который надо вписать ваш рисунок. В данной программе реализовано управление масштабом и скоростью с помощью двух объектов класса QSpinBox. Переменная m типа double нужна для того, чтобы сохранять пропорции gif-изображения при масштабировании.
Файл widget.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QPixmap pix(":/ico/loader.gif"); m = double(pix.width())/pix.height(); mo.setFileName(":/ico/loader.gif"); setSpeedMovie(ui->spinBox->value()); setSizeMovie(ui->spinBox_2->value()); ui->label->setMovie(&mo); mo.start(); connect(ui->spinBox, SIGNAL(valueChanged(int)), this, SLOT(setSpeedMovie(int))); connect(ui->spinBox_2, SIGNAL(valueChanged(int)), this, SLOT(setSizeMovie(int))); } Widget::~Widget() { delete ui; } void Widget::setSpeedMovie(int s) { mo.setSpeed(s); } void Widget::setSizeMovie(int size) { mo.setScaledSize(QSize(size*m, size)); }
Использование gif-анимации может быть полезно либо для украшения приложения, либо для визуализации некоторых процессов, например загрузки или прогресса. Воспроизведение анимации можно остановить с помощью слота stop(). Рассмотренный проект можно скачать по ссылке .
Добрый день, Dmitras.