QT QGraphicsView、QGraphicsScene和QGraphicsItem和OpenGL的使用问题

时间:2023-02-01 14:07:47
请教一个问题:是关于QT中 QGraphicsView、QGraphicsScene和QGraphicsItem使用的问题。
假设:我做一个游戏,在游戏中存在三个物体,自定义了3个QGraphicsItem子类,每个子类中都在paint函数中都使用OpenGL描画各自的一个物体。目前就我所知道的机制是当QGraphicsScene有变化时,会把事件传送给每个QGraphicsItem;假如三个物体只有一个物体需要对描画的内容改变,那么按现有的机制三个QGraphicsItem的paint函数都会被调用到,也就是说其他两个QGraphicsItem也被重新描画了,其实这是浪费性能的,因为其他两个物体并不需要重新描画,只要保持之前的图画就可以了。

我式过在其他两个QGraphicsItem的paint函数被调用时我什么也不做,那样也是不行的,如果不重新描画,这两个QGraphicsItem之前的图就没有了。

想请教一下怎么可以解决这个问题,即当有一个QGraphicsItem需要变化时,其他QGraphicsItem不重新描画也可以保持之前的图像?

如果能解决我的问题,我可以再加分,谢谢!

5 个解决方案

#1


自己顶一下,难道这么大个CSDN就没有人遇到和我相同的问题的人么?

#2


你这三个QGraphicsItem的 boundingRect() 位置有重合么?

#3


引用 2 楼 dbzhang800 的回复:
你这三个QGraphicsItem的 boundingRect() 位置有重合么?

应该有不是重合的item。
2楼意思是如果不重合就不会刷新么?

#4


lz,你的问题我也遇到了。参考QT中自带的关于OPENGL的DEMO后,好像只能使都跟着重新描画,另辟蹊径吧咱们

#5


请问楼主如何在QGraphicsItem中使用OpenGL绘图?Qt下的OpenGL绘图不是只能在QGLWidget中吗?

#1


自己顶一下,难道这么大个CSDN就没有人遇到和我相同的问题的人么?

#2


你这三个QGraphicsItem的 boundingRect() 位置有重合么?

#3


引用 2 楼 dbzhang800 的回复:
你这三个QGraphicsItem的 boundingRect() 位置有重合么?

应该有不是重合的item。
2楼意思是如果不重合就不会刷新么?

#4


lz,你的问题我也遇到了。参考QT中自带的关于OPENGL的DEMO后,好像只能使都跟着重新描画,另辟蹊径吧咱们

#5


请问楼主如何在QGraphicsItem中使用OpenGL绘图?Qt下的OpenGL绘图不是只能在QGLWidget中吗?