【问题标题】:Qt jumpToFrame() is not workingQt jumpToFrame() 不工作
【发布时间】: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,否则返回falselogo1logo1_or中的帧数也是一样吗?
  • 1.可变帧包含上一个.gif动画停止时的当前帧数。 2.是的,logo1和logo1_or指向的.gif文件帧数相同。
  • 我问你这个变量到底是什么值。
  • 这是一个动态的 int 值。正如我上面所说的,只要选中一个复选框,就会记录 frame 的值,即 frame 的值是单击该复选框时当前正在播放的 gif 的帧号。
  • 你不懂我。我很清楚这个变量的含义以及它应该包含的值。我问你这段代码运行时它到底包含什么。使用调试器检查或使用 qDebug 或其他任何方式进行输出。

标签: qt animation gif


【解决方案1】:

我遇到了同样的问题,发现如果设置movie->setCacheMode(QMovie::CacheAll);movie->jumpToFrame(int ) 可以正常工作

【讨论】:

    【解决方案2】:

    我发现你必须按顺序跳到每一帧。

    QMovie *m = new QMovie(path);
    m->start();
    m->setPaused(true);
    // jumpToFrame only seems to work if you load the frames in order
    int frame = 20;
    bool ok = m->jumpToFrame(frame);
    assert(ok); // fails
    for(int i=0; i<=frame; i++)
    {
        bool ok = m->jumpToFrame(i);
        assert(ok); //succeeds
    }
    

    偶然发现这个,但它是有道理的。如果 gif 已经播放了一个完整的循环,可能会有所不同。

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多