使用Qt动画框架的QPixmap的断断续续的滚动

Choppy scrolling of QPixmap using Qt Animation Framework

本文关键字:QPixmap 滚动 断断续续 框架 Qt 动画 使用      更新时间:2023-10-16

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

我看到奇怪的效果:脉动运动:每秒 2 次,整个图像略微加快,比平时运动快 1..2 像素。当我将Qt动画框架替换为单个60 fps QTimer并在其插槽中滚动图像时,效果相同。

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

我在我的Linux和Windows版本中看到了同样的效果。

溶液我想出了问题:"切碎"不是错误,而是一个功能!这是整数计算的一个功能,所以有时我们必须为动画使用不同的数字,例如:16,16,16,16,16,16,17,16,16,16,16,16,16,16,17 ,....

paintEvent中添加以下断言:

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

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