【发布时间】:2016-04-14 16:11:29
【问题描述】:
我有这段代码可以响应复选框中的 checked() 信号。它应该将标签中播放的 .gif 更改为具有不同颜色的另一个 .gif。我想让过渡平滑,所以我尝试使用 jumpToFrame() 命令。代码如下:
void Scoreboard::poweractive1(bool checked)
{
if(checked==true) //checkbox is checked
{
int frame=logo1->currentFrameNumber(); //get current frame number
logo1->stop(); //stops previous gif
ui->label_96->clear(); //clear contents of label containing gif
ui->label_96->setMovie(logo1_or); // place second gif on the label
logo1_or->jumpToFrame(frame); // jumps frame number of second gif to the frame number
logo1_or->start(); //start gif animation
}else // same conditions as above, except it reverses the actions above
{
ui->label_95->clear();
ui->label_95->setPixmap(*bl_divider1);
int frame=logo1_or->currentFrameNumber();
logo1_or->stop();
ui->label_96->clear();
ui->label_96->setMovie(logo1);
logo1->jumpToFrame(frame);
logo1->start();
}
}
TL;DR 版本:如何让 QMovie 从特定帧开始?
【问题讨论】:
-
你的
frame变量有什么值,logo1_or->jumpToFrame(frame)返回什么值?它应该在成功时返回true,否则返回false。logo1和logo1_or中的帧数也是一样吗? -
1.可变帧包含上一个.gif动画停止时的当前帧数。 2.是的,logo1和logo1_or指向的.gif文件帧数相同。
-
我问你这个变量到底是什么值。
-
这是一个动态的 int 值。正如我上面所说的,只要选中一个复选框,就会记录 frame 的值,即 frame 的值是单击该复选框时当前正在播放的 gif 的帧号。
-
你不懂我。我很清楚这个变量的含义以及它应该包含的值。我问你这段代码运行时它到底包含什么。使用调试器检查或使用 qDebug 或其他任何方式进行输出。