Russian Qt Forum

Qt => Мультимедиа => Тема начата: Asn от Август 14, 2005, 17:33



Название: QMovie
Отправлено: Asn от Август 14, 2005, 17:33
Как в QT4 сделать чтобы анимация gif  крутилась
"бесконечно"?


Название: QMovie
Отправлено: Dair от Август 15, 2005, 13:31
Законнектиться при помощи QMovie::connectStatus(), по приходу
QMovie::EndOfMovie сделать QMovie::restart()

rtfm, в общем :-)


Название: QMovie
Отправлено: Asn от Август 15, 2005, 18:03
А подробнее?


Название: QMovie
Отправлено: Dair от Август 15, 2005, 18:54
подробнее см. документацию к QMovie ;-)

что подробнее-то? ;-)


Название: QMovie
Отправлено: Asn от Август 16, 2005, 19:44
Речь идет о QT4.
Там в QMovie вроде такого НЕТ или я опять ошибаюсь. :shock:


Название: QMovie
Отправлено: pasta от Октябрь 04, 2005, 00:35
В Qt4 это несложно:
Код:

movie = new QMovie ("porno.gif");

Делаем свой слот типа такого
Код:

void restart ()
{
   movie->stop ();
   movie->start();
}

и коннектим его к сигалу от нашего movie:
Код:

connect (movie, SIGNAL (finished()), this, SLOT (restart())) ;

Вот и всё! Просто QMovie после команды стоп потом стартует гифку опять с первого кадра.


Название: QMovie
Отправлено: pasta от Октябрь 04, 2005, 19:29
Черт, бывает же такое!  :D
Только ответил и сам нарвался на ту же колдобину.
То, что я писал выше, отлично работало в 4.0.0, но перестало в 4.0.1
Разобрался, в чем дело. Оказалось, что из-за глюка то ли в QImageReader, то ли еще где-то по пути, воспроизвеление гифки всегда заканчивается с ошибкой после последнего кадра.

Поэтому помог только такой вариант:
Код:

void Label::restart ()
{

   if (movie) movie->~QMovie ();
   movie = new QMovie (file_name);
   if (movie->isValid())  
   {
      connect (movie, SIGNAL (finished()), this, SLOT (restart ()) );
      setMovie (movie);
      movie->start ();
   }
   else setText ("!!!");
} ;


Здесь Label - производная от QLabel. Первый if - потому что для первого старта я этот слот запускаю вручную из конструктора.
connect отсюда выносить нельзя, так как нам надо переконнектить наш слот на новый QMovie ().