Всі бачили в інтернеті красиві анімовані зображення. Їх можна завантажити на свій комп'ютер як файлу з розширенням 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.