使用Qt动画框架的QPixmap的断断续续的滚动
Choppy scrolling of QPixmap using Qt Animation Framework
我创建了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()
而不是属性值。情况可能是这样。让我知道。
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- QScrollArea:由垂直滚动条引起的水平滚动条
- 跟踪滚动条上的鼠标事件
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 如何在不使用滚动条的情况下使视图更改
- 如何为对象生成滚动效果?
- 如何模拟不同边数的骰子滚动?
- 如何初始化升压滚动窗口累加器?
- 实现包含多个 QQuickPaintedItems 的 QQuickView 的滚动
- 通过水平滚动条更改标签
- 如何防止 Windows 控制台上的回车键自动滚动
- Qt:无法直接为带有子项的小部件添加滚动条
- OnVScroll : 从 CSpinButtonCtrl 或垂直滚动条调用?
- win32 滚动条在 C/C++ 程序中不起作用
- QPixmap在Qt中加载了许多图像
- 为什么玩家控制器"own"偏航俯仰和滚动,但角色"owns"它的位置?
- 外观 MFC 滚动条
- 我在QChartView中找不到缩放图形的鼠标滚轮滚动事件
- QT QPixmap 无法在 QScrollArea 中滚动
- 使用Qt动画框架的QPixmap的断断续续的滚动