这里的问题很快
我正在尝试使用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的最新版本,它没有帮助
答案 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()
。