在Qt 4.8.5中,在QTimeLine中setPaused(true)之后setPaused(false)和resume()之间的差异

时间:2014-06-07 15:21:14

标签: c++ qt

在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没有正确暂停时间线"。但我仍然无法找出原因。

1 个答案:

答案 0 :(得分:4)

意图

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);

我在哪里可以找到更多细节?

您正在讨论的错误修复可以在以下链接中详细检查: