Дмитрий
ДмитрийJuly 6, 2017, 12:22 p.m.

Using gif animation in Qt using the QMovie class

Everyone saw beautiful animated images on the Internet. They can be downloaded to your computer as a file with the gif extension. The question arises: can I use these images in my programs? It is possible, the Qt library answers. Consider how to do this.

Create a new project of type Qt widgets. We add a QMovie object to play the animation. On the form we place an object of class QLabel. In the application designer, specify the file name for the animation object:

mo.setFileName(":/ico/loader.gif");

We pass the pointer to this object in label:

ui->label->setMovie(&mo);

We start animation playback:

mo.start();

widget.h file

#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

The QMovie class provides functions for controlling the playback speed of setSpeed() and the scale setScaledSize(). The first function is to transfer the relative playback speed in percent (100 - nominal speed, 200 - double), the second dimension of the rectangle into which you want to enter your drawing. This program implements the management of scale and speed using two QSpinBox objects. The variable m of type double is needed in order to preserve the proportions of the gif image when scaling.

widget.cpp file

#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));
}

Using gif animation can be useful for either decorating an application, or for visualizing some processes, such as uploading or progressing. Animation playback can be stopped using the stop() slot. The project can be downloaded from the link .

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Evgenii Legotckoi
  • July 6, 2017, 12:33 p.m.

Добрый день, Dmitras.

Когда создаёте статью, используйте пожалуйста тег горизонтальной линии, чтобы отделить часть контента статьи, который находится в новостной ленте от той части, которая будет видна только на странице статьи.
В редакторе присутствует такая кнопочка на тулбаре. Это действует наподобие ката на Хабре.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Test 001. Signals and slots

  • Result:84points,
  • Rating points4
Ua

Qt - Test 001. Signals and slots

  • Result:42points,
  • Rating points-8
ОК

Qt - Test 001. Signals and slots

  • Result:47points,
  • Rating points-6
Last comments
ИМ
Игорь МаксимовNov. 22, 2024, 11:51 a.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiOct. 31, 2024, 2:37 p.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 8:19 a.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 7:51 a.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 11:02 a.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
NW
Nayo WaiJan. 30, 2025, 9:22 a.m.
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
n
nklyJan. 3, 2025, 2:52 a.m.
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
MarselAug. 16, 2023, 2:26 p.m.
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Evgenii Legotckoi
Evgenii LegotckoiJune 24, 2024, 3:11 p.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 6:04 a.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]

Follow us in social networks