我创建QPropertyAnimation
并将其连接到我的SonogramWidget
,这些动画事件垂直滚动长图片。 “长图片”由100个预先计算的QPixmap对象1024x128垂直放置。他们显示在SonogramWidget::paintEvent()
与QPainter
。绘制过程不一定全部为QPixmap
,但只能看到它们,考虑小部件高度和当前垂直偏移量。 CPU几乎是免费的,因为QPixmap
是显示图片的最快方式。在滚动期间没有大的计算,因为所有的100 QPixmaps
都是预先计算的并存储在存储器中。使用Qt动画框架对QPixmap的滚动动画
我看到了奇怪的效果:脉动运动:每秒2次,整个图像稍微加速并向上移动1..2个像素,比平常运动快。当我使用单个60 fps QTimer替换Qt Animation Framework并在SLOT中滚动图像时,效果相同。
视频:http://www.youtube.com/watch?v=KRk_LNd7EBg#t=8(从00:08开始;我的firefox为视频播放本身添加了更多斩碎,谷歌Chrome播放视频效果更好)。
我看到我的Linux和Windows版本的效果相同。
解决方案 我想出了问题:“砍”不是一个bug,它是一个功能!这是整数计算的一个特点,所以有时我们必须为动画设定不同的数字,例如:16,16,16,16,16,16,17
,16,16,16,16,16,17
,。 ...
你的CPU负载说什么?滚动越慢,可见的“白色”就越多。由于QPainter对于绘制像素是白色还是黑色应该不会产生影响,因此它必须是您的校准。如果你的机器接近极限,我会期望这样的奇怪输出文物。或者,这是“越来越慢”的错觉?不确定。 – Greenflow
所有QPixmaps预先计算并存储在内存中。在滚动期间没有计算。只有黑色像素的整个图像对比度较低,我们没有注意到所描述的效果。 – pavelkolodin
我不知道,所以这是纯粹的猜测。但有时甚至这有助于。 :-)那么,你有可能把全部放在一个pixmap中吗?只是暂时的?只是为了排除100个垂直QPixmaps奇怪地交互? – Greenflow