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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [qt-4.2.0] QMovie - баг или моя ошибка  (Прочитано 3938 раз)
izoomer
Гость
« : Апрель 11, 2007, 21:28 »

Есть такой код ...
Код:

QMovie baner = new QMovie ("baners/baner.gif");
baner->setCacheMode(QMovie::CacheAll);
qDebug() << "frameCount = " << baner->frameCount();
banerLabel->setMovie( baner );
baner->start();

1. frameCount() всегда 0 ... что не так ?
2. Сигнал finished() не появляется.
3. Всегда по кругу крутится банер.

добавлено спустя 36 минут:

 в целом задача такая - потребовалось организовать что ттипа очреди из прогрываемых файлов и проигрывать их по-очереди в QMovie ... читаю папку с файлами:
Код:

QDir dir(QDir::currentPath() + "/baners");
if (!dir.exists()) qFatal ("Не найдена директория: %s",dir.dirName());
QFileInfoList fileList = dir.entryInfoList(QDir::Files);
foreach(QFileInfo currentFile, fileList){
QMovie * _baner = new QMovie(currentFile.filePath());
_baner->setCacheMode(QMovie::CacheAll);
connect( _baner, SIGNAL(finished()), this, SLOT( startNextBaner() ));
listBaner.append( _baner );
}
              QMovie * baner = listBaner[0];
              baner->start();


однако сигнал finished не появляется ... думал сделать через отслеживание посленего фрейма и запуск следующего файла в ....
Код:

connect(_baner, SIGNAL(frameChanged(int)), this, SLOT(updateFrameSlider(int)));
...
...
...
void JBaner::updateFrameSlider( int frame)
{
if ( baner->isValid() &&
frame == baner->frameCount()-1 &&
baner->frameCount() > 0 ) {
currentBaner++;
baner->stop();
baner = listBaner[currentBaner];
banerLabel->setMovie( baner );
baner->start();
}
}

однако при первом запуске start() , значение frameCounter() равно 0 ... и только после того как файл доиграет до конца первый раз, до последнего фрейма, только тогда возвращается корректное значение frameCount(). То есть проигрывать файлы из папки поп орядку можно , только они проходят по два цикла просмотра каждый, вместо того, что бы после окончания проигрывания одного, начинать сразу играть следующий.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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