我只使用QPropertyAnimation作为滴答的来源。我设置了1秒动画,无限多个循环,调用start(),然后在一个“滴答处理程序”中观察QElapsedTimer::infinite (),以了解从动画开始所需的时间。因此,我不依赖循环计数、动画开始值和停止值,也不关心被动画化的属性值。只是滴答的源头!
在此之前,我使用了在Linux和windows上给出不同结果的QTimer:为了使动画在Linux中平滑,我必须使用QTimer interval = 1000/30,但是对于windows 1000/60是最小的。所以我不得不使用#ifndef,但这是一个肮脏的代码。此外,QTimer使用信号插槽机制,但QPropertyAnimation不使用,因此我的QApplication事件循环不忙于动画事件(我是正确的吗?)
现在我需要动画N小部件(每种动画的不同类型),我将以同样的方式使用QPropertyAnimation --作为同样愚蠢的滴答源。
这些变体之间的CPU成本差异是什么?
N的QPropertyAnimation实例每个都连接到自己的小部件;Qt文档表示,QPropertyAnimation在滴答之间大约在60 its = ~17 ms处触发滴答。但是Qt不能同时从N不同的QPropertyAnimation实例中触发滴答声,因为您可能在不同的时间()启动了这些动画--假设在QPropertyAnimation::start()之间有8 ms。QPropertyAnimation实例连接到某种代理对象,该代理对象将滴答传递到N小部件;所有这些小部件都有一个成员'animTick(void)‘。发布于 2013-09-02 17:43:18
如果你想要的只是一个“滴答”的来源,那么你所需要的就是一个QVariantAnimation,而不是QPropertyAnimation。
动画越多,CPU的成本就越高。您所需要的只是一个动画,它的valueChanged(QVariant)信号连接到多个小部件。
注意,QBasicTimer不是任何东西的来源,它是QObject::startTimer()返回的计时器id的一个非常薄的包装器。因此,它只在QObject实例中工作,并且只有在您重新实现timerEvent(...)时才能工作。
QVariantAnimation只是一个很好的计时代码的来源,这样您就不需要重新发明轮子了。
如果您想要一个向多个对象发送信号的通用计时器,那么您确实需要一个QTimer。这就是它的目的。这样您就不需要代理对象了,因为您可以将一个信号连接到多个插槽。如果您愿意,也可以将信号连接到信号--因此您可以转发或别名信号。QTimer只是一个QObject,带有发射信号的timerEvent(...)。仅此而已。写你自己的作品是很愚蠢的。
https://stackoverflow.com/questions/18551394
复制相似问题