我正在尝试在QPainter(在OpenGLwidget中)以60fps显示视频。
我遇到了一个问题,有时候绘制需要的时间太长,下一个重绘事件会在QPainter正在使用时发生 - 这会生成警告和随机崩溃。
几个问题:
是否有一种“Qt方式”有效地交错对重绘的调用,因为QPainter知道自己正在使用 - 还是我只是使用平台的互斥支持?
除了使用定时器调用repaint()之外,有没有更好的方法以高帧率绘制(当然还需要锁定VSync)?
我正在尝试在QPainter(在OpenGLwidget中)以60fps显示视频。
我遇到了一个问题,有时候绘制需要的时间太长,下一个重绘事件会在QPainter正在使用时发生 - 这会生成警告和随机崩溃。
几个问题:
是否有一种“Qt方式”有效地交错对重绘的调用,因为QPainter知道自己正在使用 - 还是我只是使用平台的互斥支持?
除了使用定时器调用repaint()之外,有没有更好的方法以高帧率绘制(当然还需要锁定VSync)?
尝试使用update()
而不是repaint()
。
这个函数不会立即重绘;相反,它会在Qt返回主事件循环时安排一个绘制事件进行处理。这使得Qt可以优化更快的速度和更少的闪烁,比调用repaint()更好。
多次调用update()通常只会导致一次paintEvent()调用。