Проблемы с использованием QMovie с GIF-анимацией в QLabel - PullRequest
1 голос
/ 13 декабря 2011

Я искал какое-то решение для моей проблемы и ничего ... Я использую QMovie с GIF-анимацией в одном QLabel для статуса загрузки, хорошо? Это просто, и я узнал по этой ссылке: GIF-анимация в Qt , это прекрасно работает, когда я, например, открываю меню, когда у меня есть одна метка, и я помещаю QMovie в QLabel этого меню.

Моя проблема сейчас в том, что я создал специальный пользовательский интерфейс для статуса загрузки, когда я знаю, что какой-то пользовательский интерфейс будет медленно открываться, я показываю свой пользовательский интерфейс состояния загрузки, и когда пользовательский интерфейс заканчивается, я закрываю свой пользовательский интерфейс состояния загрузки. , В этом пользовательском интерфейсе загрузки я поместил один QMovie (GIF-анимацию) и простой QLabel с надписью «Загрузка ...», очень просто, верно? Buuuut, когда я использую этот конкретный интерфейс, QMovie не работает. На самом деле он не остается в цикле ... Видите ли, когда я использую QMovie в пользовательском интерфейсе, чем я открываю, QMovie остается в цикле.

Мой английский не очень хорош, но ты понимаешь мою проблему? = /

Я использую тот же код ссылки:

this->m_pMovie = new QMovie(":/ui/images/my_image_loading.gif");
this->m_pMovie->setScaledSize(QSize(50, 50));
this->ui->labelImageLoading->setMovie(this->m_pMovie);
this->m_pMovie->start();

Кто-нибудь знает об этом?

Спасибо ...

1 Ответ

2 голосов
/ 13 декабря 2011

Все выглядит хорошо в том, как вы используете QMovie. Это всего лишь предположение, но мне интересно, если ваш QMovie не обновляется, потому что поток GUI слишком занят. Если у вас медленно загружается пользовательский интерфейс, это может быть связано с тем, что он потребляет много обработки в потоке графического интерфейса. Это тот же поток , который пытается обновить ваш QMovie. Результат: ваш QMovie никогда не обновляется, потому что он зависит от того же потока GUI, который окрашивает свои обновления.

Если в процессе загрузки пользовательского интерфейса есть место, где вы могли бы сделать несколько звонков на QApplication::processEvents(), это заставило бы фильм обновить. Но это может быть изменчивым.

В противном случае вы ничего не можете сделать, кроме как попытаться найти способ ускорить загрузку этих интерфейсов. (Разделите их на разные окна, просто макеты, разбейте на вкладки, которые загружаются по мере необходимости и т. Д.)

...