【发布时间】:2013-08-31 18:18:56
【问题描述】:
我只是将QPropertyAnimation 用作蜱的来源。我设置了 1 秒动画,无限数量的循环,调用 start() 然后在“tick 处理程序”中观察 QElapsedTimer::elapsed() 以了解从动画开始经过了多少时间。所以,我不依赖循环计数、动画开始和停止值,也不关心正在动画的属性值。只是蜱虫的来源!
在此之前,我使用QTimer 在 Linux 和 Windows 上给出不同的结果:为了在 Linux 中平滑动画,我必须使用 QTimer 间隔 = 1000/30,但对于 Windows 1000/60 是最低要求.所以我不得不使用#ifndef,但这是一个肮脏的代码。除此之外,QTimer 使用信号槽机制,但 QPropertyAnimation 没有,所以我的 QApplication 事件循环不忙于动画事件(我说的对吗?)
现在我需要为N 小部件制作动画(每个小部件使用不同类型的动画),并且我将以同样的方式使用 QPropertyAnimation - 作为同样愚蠢的滴答声源。
这些变体之间的 CPU 成本差异是什么:
-
N运行QPropertyAnimation实例,每个实例都连接到自己的小部件; Qt 文档说QPropertyAnimation在滴答声之间以大约 60fps = ~17 ms 的速度发射滴答声。但是 Qt 不能同时从N不同的QPropertyAnimation实例触发滴答声,因为您可能在不同的 time() 开始了这些动画 - 假设QPropertyAnimation::start()之间有 8 毫秒。 - 1 个正在运行的
QPropertyAnimation实例连接到某种代理对象,该代理对象将滴答声传输到N小部件;所有这些小部件都有一个成员 'animTick(void)'。
【问题讨论】:
-
根据您的帖子,恐怕您正在尝试做的事情非常复杂,并且与许多 Qt 习语背道而驰。这是一个开源项目吗?如果是这样,你能提供一个存储库的链接吗?
-
@KubaOber sourceforge.net/projects/audigger
-
我已经为此创建了一个聊天室。
标签: c++ qt animation cross-platform