0

我创建QPropertyAnimation并将它连接到我SonogramWidget在动画事件上垂直滚动的长图片。“长图”由 100 个预先计算好的 QPixmap 对象组成,1024x128 一个接一个地垂直放置。他们显示SonogramWidget::paintEvent()QPainter. 绘图过程不是QPixmap一次全部绘制,而是仅对它们可见,考虑到小部件高度和当前垂直偏移。CPU 几乎是免费的,因为QPixmap它是显示图片的最快方式。滚动过程中没有大的计算,因为所有的100QPixmaps都是预先计算好的并存储在内存中。

我看到了奇怪的效果: 脉动运动:每秒 2 次整个图像略微加速,并且比通常的运动快 1..2 个像素。当我用单个 60 fps QTimer 替换 Qt Animation Framework 并在其 SLOT 中滚动图像时,效果相同。

视频:http ://www.youtube.com/watch?v=KRk_LNd7EBg#t= 8(从 00:08 开始观看;我的 Firefox 为视频播放本身添加了更多的切碎,谷歌浏览器播放视频更好)。

对于我的 Linux 和 Windows 版本,我看到了同样的效果。

解决方案 我发现了问题:“斩波”不是错误,而是一个功能!这是整数计算的一个特性,所以有时我们必须为动画设置不同的数字,例如:16,16,16,16,16,16, 17,16,16,16,16,16 17,... .

4

1 回答 1

0

paintEvent添加以下断言:

Q_ASSERT(m_animation->currentValue() == m_animatedPropertyValue);

如果它触发,那么你知道你必须使用currentValue()而不是属性值。可能是这种情况。让我知道。

于 2013-08-30T21:29:41.800 回答