gpt4 book ai didi

c++ - qt中用于动画的QTimer

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:41 25 4
gpt4 key购买 nike

我希望每秒调用 60 次 paintEvent() 以在小部件内移动多个对象。小部件类似于 chrome 浏览器的选项卡:当您将选项卡拖离其位置很远时,它会向后移动,并在到达位置时降低速度。

我使用 QTimer 连接到一个插槽,在那里我重新计算一些几何参数,然后调用 update() 使 qt 主循环调用 paintEvent(),我在其中绘制一些线和 QPixmaps。

但是设置为 1/60 秒间隔的两个 QTimer 对象消耗了“Core i5 2500K”CPU 的 10%。对于每个每秒 60 个时钟周期的 2 个计时器来说,CPU 时间不是太多了吗?如果我从 QTimer 连接到的 slot() 中删除所有代码(“return;”语句除外),CPU 时间的情况是相同的。

最佳答案

通常对于动画,您让 Qt 计算出适当的时间。运行速度如此之快有什么特别的原因吗?如果您使用 QPropertyAnimation,您可以获得一些非常漂亮的结果,带有流畅的动画。 EasingCurve 也可以给你一些很棒的效果。

http://qt.apidoc.info/4.8.5/animation-animatedtiles.html

编辑:每秒调用 update 60 次并不一定每秒重绘 60 次;相反,您每秒 60 次将重绘请求放在事件循环中。根据 Qt 获得的时间和显卡的刷新率以及其他因素,如果程序的主 GUI 事件循环可能只能以每秒 20-35 倍的速度重新绘制图形,则多个 update 调用被忽略。如果您要求每秒绘制 60 次,您可以使用 repaint()。但在大多数情况下,您应该调用 update

http://qt-project.org/doc/qt-4.8/qwidget.html#update

此外,如果计算速度如此之慢,您应该尝试缓存尽可能多的计算。希望对您有所帮助。

关于c++ - qt中用于动画的QTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com