На этом шаге рассмотрим класс QMovie.
Для создания анимации можно воспользоваться классом QPixmap, показывая изображения одно за другим. Но лучше воспользоваться уже готовым классом QMovie, который выполнит эту работу за вас. Объекты класса хранят в себе анимацию и могут возвращать отдельные изображения в объектах класса QPixmap или QImage. Этот класс поддерживает форматы MNG и GIF.
В конструктор класса QMovie передается имя анимационного файла. Проигрывание анимации начинается сразу после создания объекта. Также в этом классе определены конструктор копирования и оператор присваивания.
На проигрывание анимации можно влиять следующими слотами: setPaused(bool), setSpeed(), stop() и start().
Передача в метод setPaused() значения true приостанавливает проигрывание анимации, а false возобновляет проигрывание. В обоих случаях осуществляется пересылка сигнала stateChanged() со статусом состояния проигрывания. Вызов метода QMovie::start() запускает воспроизведение анимации, а stop() его останавливает.
Информацию о статусе проигрывания можно получить при помощи метода state(), который возвращает одно из трех значений:
Для того чтобы узнать количество кадров анимационного файла, нужно вызвать метод frameCount(). Если необходимо получить растровое изображение актуального кадра, то нужно вызвать метод currentPixmap() или currentImage(), которые возвращают ссылки на объекты QPixmap или QImage.
Самый простой способ показа анимации — это использование класса QLabel. Класс QLabel содержит метод setMovie(), с помощью которого можно устанавливать объекты анимации. Пример, показанный на рис. 1, иллюстрирует эту возможность.
Рис.1. Пример анимации
#include <QApplication> #include <QLabel> #include <QMovie> int main(int argc, char** argv) { //в программе создаются 3 объекта QApplication app(argc, argv); //приложение (app) app.setApplicationDisplayName("Анимация"); QLabel lbl; //надпись (lbl) QMovie mov("motion.mng"); //анимационный объект (mov), //инициализируется файлом motion.mng lbl.setMovie(&mov); //анимационный объект устанавливается в виджете надписи lbl.resize(348, 270); //устанавливаются размеры виджета надписи lbl.show(); mov.start(); //запускается анимация return app.exec(); }
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим класс QSvgWidget.