许多QPropertyAnimation实例与单个实例相比
Many QPropertyAnimation instances VS single one?
我将QPropertyAnimation
简单地用作记号的来源。我设置了1秒的动画,无限数量的循环,调用start()
,然后在"tick handler"中观察QElapedTimer::elapsed(),以了解从动画开始经过了多少时间。所以,我不依赖循环数,动画的开始和停止值,我也不关心正在被动画化的属性值。只是蜱虫的来源!
在此之前,我使用的QTimer
在Linux和Windows上会产生不同的结果:为了在Linux中使动画流畅,我必须使用QTimer
间隔=1000/30,但对于Windows,1000/60是最小值。所以我不得不使用#ifndef,但这是一个肮脏的代码。除此之外,QTimer使用信号槽机制,但QPropertyAnimation没有,所以我的QApplication事件循环并不忙于动画事件(我说得对吗?)
现在,我需要为N
小部件制作动画(每个小部件都有不同类型的动画),我将以同样的方式使用QPropertyAnimation——作为同样愚蠢的蜱虫源。
这些变体之间的CPU成本差异是什么:
- 运行CCD_ 7实例的CCD_;Qt文档表示,
QPropertyAnimation
以约60fps的速度发射,两次发射之间的间隔约为17毫秒。但是Qt不能同时从N
个不同的QPropertyAnimation
实例中触发tick,因为您可能在不同的时间()启动了这些动画——假设QPropertyAnimation::start()
之间有8毫秒 - 1个连接到某种代理对象的单个运行的
QPropertyAnimation
实例,该代理对象将记号传输到N
小部件;所有这些小部件都有一个成员"animTick(void)"
如果你只想要一个"ticks"的来源,那么你只需要一个QVariantAnimation
,甚至不是QPropertyAnimation
。
动画越多,CPU成本就越高。您只需要一个动画,其valueChanged(QVariant)
信号连接到多个小部件。
注意,QBasicTimer
不是任何东西的来源,它是QObject::startTimer()
返回的定时器id的一个非常薄的包装器。因此,它仅在QObject
实例中工作,并且仅在重新实现timerEvent(...)
时工作。
QVariantAnimation
只是一个定时良好的滴答声来源,因此您不需要重新发明轮子。
如果您想要一个向多个对象发送信号的通用计时器,那么您确实需要一个QTimer
。这就是它的用途。这样,您就不需要代理对象,因为您可以将一个信号连接到多个插槽。如果你愿意,你也可以将信号连接到信号,这样你就可以转发或别名信号。CCD_ 23只是具有发射信号的CCD_ 25的QObject
。这就是它的全部内容。自己写是愚蠢的。
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 通过单个实例从多个类访问一个类
- 如何在C++中调试单个容器实例的大小
- 传递单个或向量对象时没有重载函数的实例
- Qt - 打开窗口的单个实例
- 如何在崩溃时管理Qt应用程序的单个实例
- C++ 使用单个输入字节文件的不同部分实例化堆栈上的成员类
- 函数的单个实例
- cout 对象是否保持单个实例,即它永远不会被复制
- C++程序的单个实例,使用boost::interprocess
- 许多QPropertyAnimation实例与单个实例相比
- 每个层次结构的单个单一实例继承
- 最大化qt中单个实例应用程序的已运行实例
- Qt new-多个实例或指向单个实例的指针
- 为C++中模板的所有实例生成的单个机器代码实例:它是否可行和/或可能
- 对于单个实例应用程序,只允许使用单个窗口消息框
- 单个类实例在GUI exe和dll中是不同的
- 如何按值从vector中删除元素,但只能删除该值的单个实例
- 单独对象的单个模板实例化