Russian Qt Forum
Ноябрь 22, 2024, 09:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMovie  (Прочитано 11357 раз)
Asn
Гость
« : Август 14, 2005, 17:33 »

Как в QT4 сделать чтобы анимация gif  крутилась
"бесконечно"?
Записан
Dair
Гость
« Ответ #1 : Август 15, 2005, 13:31 »

Законнектиться при помощи QMovie::connectStatus(), по приходу
QMovie::EndOfMovie сделать QMovie::restart()

rtfm, в общем :-)
Записан
Asn
Гость
« Ответ #2 : Август 15, 2005, 18:03 »

А подробнее?
Записан
Dair
Гость
« Ответ #3 : Август 15, 2005, 18:54 »

подробнее см. документацию к QMovie ;-)

что подробнее-то? ;-)
Записан
Asn
Гость
« Ответ #4 : Август 16, 2005, 19:44 »

Речь идет о QT4.
Там в QMovie вроде такого НЕТ или я опять ошибаюсь. :shock:
Записан
pasta
Гость
« Ответ #5 : Октябрь 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 после команды стоп потом стартует гифку опять с первого кадра.
Записан
pasta
Гость
« Ответ #6 : Октябрь 04, 2005, 19:29 »

Черт, бывает же такое!  Веселый
Только ответил и сам нарвался на ту же колдобину.
То, что я писал выше, отлично работало в 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 ().
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.115 секунд. Запросов: 20.