QGraphicsScene 只针对性刷新其中一个QGraphicsItem

时间:2023-01-31 23:17:13
各位大侠,请教关于QGraphicsScene 与QGraphicsItem 的问题

现在我在程序中使用了QGraphicsScene 与QGraphicsView 和很多重写过的QGraphicsItem(超过100个)

当有外部数据过来后,我希望 针对性的只更新一个QGraphicsItem的坐标或者形状。请问应该用什么方式,或者在Qt中有什么样的Demo可以借鉴?

非常感谢。

在线等

7 个解决方案

#1


三个方法
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent

我在实际中 使用了 第三个 方案

#2


更新指定的QGraphicsItem即可,QGraphicsItem的区域keyi 映射到scene或view,更新那个区域即可。

#3


引用 1 楼 dext 的回复:
三个方法
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent

我在实际中 使用了 第三个 方案

非常感谢您的回答。还有些问题请教您,
1.创建 可刷新的Item ?如何创建,里面带上定时器?
2. 使用 QWidget::paintEvent,这个和使用Item区别在什么地方?两者效率差大吗?

#4


例子:4000chips
看过源码,发现他只刷新了很小的矩形区域,基本就比每个item大一点点,你可以研究一下,不过比较复杂

#5


使用QWidget::paintEvent是需要你自己重新定制item,并不能继承重写。
Item只需加进场景,它自己就会在view中显示出来,并且自带相应事件,功能。
效率肯定是自带的GraphicsView里的显示要高,但item数量没达到上千,应该差别不大。

#6


QGraphicsItem有个update方法,它应该可以刷新boundingRect区域.

#7


自己写的继承过item的类应该有实现paint了吧,直接设数据然后update就可以了,如果改变位置直接setpos就可以,自动update。

#1


三个方法
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent

我在实际中 使用了 第三个 方案

#2


更新指定的QGraphicsItem即可,QGraphicsItem的区域keyi 映射到scene或view,更新那个区域即可。

#3


引用 1 楼 dext 的回复:
三个方法
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent

我在实际中 使用了 第三个 方案

非常感谢您的回答。还有些问题请教您,
1.创建 可刷新的Item ?如何创建,里面带上定时器?
2. 使用 QWidget::paintEvent,这个和使用Item区别在什么地方?两者效率差大吗?

#4


例子:4000chips
看过源码,发现他只刷新了很小的矩形区域,基本就比每个item大一点点,你可以研究一下,不过比较复杂

#5


使用QWidget::paintEvent是需要你自己重新定制item,并不能继承重写。
Item只需加进场景,它自己就会在view中显示出来,并且自带相应事件,功能。
效率肯定是自带的GraphicsView里的显示要高,但item数量没达到上千,应该差别不大。

#6


QGraphicsItem有个update方法,它应该可以刷新boundingRect区域.

#7


自己写的继承过item的类应该有实现paint了吧,直接设数据然后update就可以了,如果改变位置直接setpos就可以,自动update。