Qt QImageReader不会循环,无法控制

时间:2015-01-03 20:22:00

标签: qt loops gif qimage

这里的问题很快

我正在尝试使用QImageReader来读取Gif的帧,但是当动画结束时,它将不会循环。我甚至无法控制加载哪个帧,因为使用ImageReader的read()函数返回QImage或使用QPixmap :: fromImageReader()都会导致QImageReader自动跳转到下一帧。问题是它们都使用相同的逻辑,如果它在动画结束时,只返回null而不是重置。

以下是我尝试使用Gifs的方式:我的类有一个QTimer和一个QImageReader。在TimeOut的计时器上,我调用了我的“nextFrame()”插槽。

void GifPlayer::nextFrame()
{
    if (img->currentImageNumber() == img->imageCount()-1)
    {
        img->jumpToImage(0);
    }
    else
        img->jumpToNextImage();
    this->lbl->setPixmap(QPixmap::fromImageReader(img));
}

我必须在这里提出一些基本问题 - 有人可以帮帮我吗?我甚至更新到Qt的最新版本,它没有帮助

2 个答案:

答案 0 :(得分:2)

QMovie听起来更适合您的用例,前提是您可以使用它。以下给出了基本概念,并将使用GIF,自动循环:

...

void MyWindow::init() {
  movie = new QMovie("mymovie.gif");
  if(!movie->isValid()) {
    qFatal("Movie not valid");
  }
  movie->stop(); // Ensure stopped.
}

void::MyWindow nextFrameSlot() {
  this->lbl->setPixmap(movie->currentPixmap());
  this->movie->jumpToNextFrame();
}

...

答案 1 :(得分:0)

这不是我尝试过的,但QImageReader类有以下三种方法:

int currentImageNumber () const
  

对于支持动画的图像格式,此函数返回当前帧的序列号。


int imageCount () const
  

对于支持动画的图像格式,此函数返回动画中的图像总数。


bool    jumpToImage ( int imageNumber )
  

对于支持动画的图像格式,此功能会跳至序列号为imageNumber的图像。


在我看来,前两种方法可以确定您何时读取动画的最后一帧,然后使用jumpToImage跳回到第一帧之前下一个read()