在qtimeline.cpp的源代码中, setPaused(false) resume()与以下内容几乎相同:

d->timerId = startTimer(d->updateInterval);
d->startTime = d->currentTime;
d->timer.start();
d->setState(Running);

在文档中, setPaused(false)恢复时间轴并继续到其离开的位置,但是 resume()从当前时间恢复时间轴。
谁能解释与“相同”代码不同的结果?
我读了解决的问题http://qt-project.org/forums/viewthread/28076“QTimeLine setPaused无法正确暂停时间线”。但是我仍然找不到原因。

最佳答案

意向
resume ()setPaused (false)之间的预期区别如下:

  • resume会无条件地将QTimeLine的状态更改为Running,而不管其先前的状态如何,
  • 除非状态当前为setPaused(false),否则
  • Paused将不执行任何操作。


  • 源代码
    setPaused的实现在运行问题中的代码之前先检查状态是否确实为Paused,这就是为什么“同一代码”产生不同结果的原因。

    以下是resume的整个正文,但仅是setPaused定义的一小部分(在错误修复之后)。
    d->timerId = startTimer(d->updateInterval);
    d->startTime = d->currentTime;
    d->timer.start();
    d->setState(Running);
    
    setPaused (x)的先前(错误的)实现在state == Pausedx == false的分支中具有以下内容:
    d->timerId = startTimer(d->updateInterval);
    d->setState(Running);
    

    我在哪里可以找到更多详细信息?

    您正在谈论的错误修复程序可以在以下链接下进行详细检查:
  • Change Ib9b2c5a0: Fixed bug in QTimeLine::setPaused(false)
  • Change Ib9b2c5a0: src/corelib/tools/qtimeline.cpp
  • 10-06 10:34