Показывать GIF только один раз - PullRequest
0 голосов
/ 14 января 2019

Я использую картинки в своем приложении. Я хотел бы показать мой GIF только один раз, а затем заставить его исчезнуть. Но он продолжает повторяться и показываться снова и снова.

Вот что я пробовал:

    movie = new QMovie(":/in_game/src/countdown.gif");
processLabel = new QLabel();
this->addWidget(processLabel);
processLabel->setStyleSheet("background-color: rgba(0,0,0,0%)");
processLabel->setGeometry(280,250,128,128);

processLabel->setMovie(movie);

int i=0;

if(i<1)
{
    movie->start();
    i++;
}
else
{
    movie->stop();
    processLabel->setEnabled(false);
}

Конечно, в моем .h я создал QMovie и QLabel ... Есть идеи, как отобразить только один раз?

1 Ответ

0 голосов
/ 14 января 2019

У вас есть QMovie::frameCount() метод и сигнал QMovie::frameChanged(). Проверьте текущий номер кадра и остановитесь, когда текущий кадр станет равным QMovie::frameCount()

m_movie = new QMovie(":/gif/tenor.gif");
connect(m_movie, SIGNAL(frameChanged(int)),
        this, SLOT(OnFrameChanged(int)));

ui->lblMovie->setMovie(m_movie);
m_movie->start();

А в слоте:

void MainWindow::OnFrameChanged(int frame)
{
    if (frame == m_movie->frameCount() - 1) {
        m_movie->stop();
    }
}
...