这次修改是经过一些实验后, 得出最后相对比较好的实现雪花飘落的方案.
之前说过使用每朵雪花都用自己的timer更新背景实现动画和使用QGraphicsView等实现动画. 我也做了一些尝试, 最终还是以CPU爆表告终.
QGraphicsView的实验例子: http://blog.csdn.net/vince025/article/details/17710965
还有就是用Animation相关的类实现. 但是研究了一下. Animation比较适合做一次性连贯动画, 例如场景过度之类的. 鉴于雪花飘落过程是随机控制的, 个人认为不适合使用Animation来做.
因此, 最终的方案就是使用多个QLabel来存放要连续显示的图片, 然后按顺序一个一个地show出来, (show出来后记得hide掉上一次show的图片).
还有一个问题, 比如使用100个雪花飘落, 每个雪花都要更新自己的图片组, 使用雪花本身的timer来更新, 还是使用一个全局timer, 在timerEvent里循环100次更新所有雪花呢?
如果每个雪花都个体更新, 就只能独立使用timer了. 在雪花飘落的这个应用中, 可以使用全局timer来一次更新整个场景. 使用一个全局timer比一个雪花使用一个timer消耗的CPU要小, 这是很明显的了, 哈哈~
第三次修改(最终)采用了原来的Label显示的方法,完整代码在
https://github.com/vince025/DesktopSnowFalling.git
branch 2.0