在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 == Paused
和x == false
的分支中具有以下内容:d->timerId = startTimer(d->updateInterval);
d->setState(Running);
我在哪里可以找到更多详细信息?
您正在谈论的错误修复程序可以在以下链接下进行详细检查: