Анимация GIF в QT

Строка селектора, переданная в .next, отфильтрует следующий элемент, если он не соответствует строке селектора. Но следующий элемент - это li, а не a, поэтому .next('li a') не будет работать.

Вместо этого используйте .next("li").find('a'):

var linktext1 = jQuery(".selected").next("li").find('a').text();
console.log(linktext1);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="abc selected"><a href="www.test.com">test</a> </li>
  <li class="abc"><a href="www.test1.com">test1</a> </li>
  <li class="abc"><a href="www.test2.com">test2</a> </li>
</ul>

В этой конкретной ситуации, тем не менее, нет необходимости селектор li для перехода на .next, потому что .selected будет li, поэтому любой из его братьев и сестер также будет li с:

var linktext1 = jQuery(".selected").next().find('a').text();
console.log(linktext1);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="abc selected"><a href="www.test.com">test</a> </li>
  <li class="abc"><a href="www.test1.com">test1</a> </li>
  <li class="abc"><a href="www.test2.com">test2</a> </li>
</ul>

23
задан Angie Quijano 10 December 2015 в 20:26
поделиться

3 ответа

Я не использую анимацию GIF с QGraphicsView или QGraphicsScene, я использую ее только в QDialog, но я думаю, что это то же самое, поэтому вот мой код:

QMovie *movie = new QMovie(":/images/other/images/16x16/loading.gif");
QLabel *processLabel = new QLabel(this);
processLabel->setMovie(movie);
movie->start();

Мой loading.gif я взял из эту ссылку.


PS: также посмотрите примеры из Qt SDK. Они действительно могут помочь!

71
ответ дан 29 November 2019 в 00:40
поделиться

Я поместил это здесь на случай, если кто-то, кроме меня, столкнется с той же проблемой.

Проблема

GIF не загружается и isValid() возвращает false.

Код

// Load animated GIF
QMovie* movie = new QMovie("foo.gif");

// Make sure the GIF was loaded correctly
if (!movie->isValid()) 
{
    // Something went wrong :(
}

// Play GIF
QLabel* label = new QLabel(this);
label->setMovie(movie);
movie->start(); 

Решение

Чтобы решить эту проблему, я должен был поместить GIF-плагин Qt qgif4.dll в папку с именем imageformats рядом с моим exe, чтобы иметь возможность использовать GIF.

DLL можно найти в /plugins/imageformats/qgif4.dll.

21
ответ дан 29 November 2019 в 00:40
поделиться

http://doc.qt.io/qt-5/qmovie.html

Google и Qt docs - ваши друзья. Там даже есть пример .

PS: если вы не в Китае, то Google недоступен, но у вас есть такие вещи, как Bing и doc.qt.io.com .

PS2: для более подробного ответа: вы можете использовать QGraphicsProxyWidget из QLabel, который имеет QMovie через QLabel::setMovie. Вероятно, есть более простой / короткий способ сделать это.

3
ответ дан 29 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: