现在我在程序中使用了QGraphicsScene 与QGraphicsView 和很多重写过的QGraphicsItem(超过100个)
当有外部数据过来后,我希望 针对性的只更新一个QGraphicsItem的坐标或者形状。请问应该用什么方式,或者在Qt中有什么样的Demo可以借鉴?
非常感谢。
在线等
7 个解决方案
#1
三个方法
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent
我在实际中 使用了 第三个 方案
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent
我在实际中 使用了 第三个 方案
#2
更新指定的QGraphicsItem即可,QGraphicsItem的区域keyi 映射到scene或view,更新那个区域即可。
#3
非常感谢您的回答。还有些问题请教您,
1.创建 可刷新的Item ?如何创建,里面带上定时器?
2. 使用 QWidget::paintEvent,这个和使用Item区别在什么地方?两者效率差大吗?
#4
例子:4000chips
看过源码,发现他只刷新了很小的矩形区域,基本就比每个item大一点点,你可以研究一下,不过比较复杂
看过源码,发现他只刷新了很小的矩形区域,基本就比每个item大一点点,你可以研究一下,不过比较复杂
#5
使用QWidget::paintEvent是需要你自己重新定制item,并不能继承重写。
Item只需加进场景,它自己就会在view中显示出来,并且自带相应事件,功能。
效率肯定是自带的GraphicsView里的显示要高,但item数量没达到上千,应该差别不大。
Item只需加进场景,它自己就会在view中显示出来,并且自带相应事件,功能。
效率肯定是自带的GraphicsView里的显示要高,但item数量没达到上千,应该差别不大。
#6
QGraphicsItem有个update方法,它应该可以刷新boundingRect区域.
#7
自己写的继承过item的类应该有实现paint了吧,直接设数据然后update就可以了,如果改变位置直接setpos就可以,自动update。
#1
三个方法
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent
我在实际中 使用了 第三个 方案
1. 改变 Graphics Scene 的索引方式。
2. 自己创建 可刷新的Item
3.从头来 使用 QWidget::paintEvent
我在实际中 使用了 第三个 方案
#2
更新指定的QGraphicsItem即可,QGraphicsItem的区域keyi 映射到scene或view,更新那个区域即可。
#3
非常感谢您的回答。还有些问题请教您,
1.创建 可刷新的Item ?如何创建,里面带上定时器?
2. 使用 QWidget::paintEvent,这个和使用Item区别在什么地方?两者效率差大吗?
#4
例子:4000chips
看过源码,发现他只刷新了很小的矩形区域,基本就比每个item大一点点,你可以研究一下,不过比较复杂
看过源码,发现他只刷新了很小的矩形区域,基本就比每个item大一点点,你可以研究一下,不过比较复杂
#5
使用QWidget::paintEvent是需要你自己重新定制item,并不能继承重写。
Item只需加进场景,它自己就会在view中显示出来,并且自带相应事件,功能。
效率肯定是自带的GraphicsView里的显示要高,但item数量没达到上千,应该差别不大。
Item只需加进场景,它自己就会在view中显示出来,并且自带相应事件,功能。
效率肯定是自带的GraphicsView里的显示要高,但item数量没达到上千,应该差别不大。
#6
QGraphicsItem有个update方法,它应该可以刷新boundingRect区域.
#7
自己写的继承过item的类应该有实现paint了吧,直接设数据然后update就可以了,如果改变位置直接setpos就可以,自动update。