如何在addItem或itemChange上从QGraphicsScene获取通知?

Mar*_*ngs 10 notifications qt signals qgraphicsitem qgraphicsscene

在我的项目中,我正在使用a QGraphicsScene并在代码中添加/删除项目.

现在,我想QGraphicsItem在添加或删除时收到通知.许多Qt类具有通知信号或至少被调用此类更改的虚函数.我试图避免在许多地方添加许多行代码,这不仅麻烦而且不安全(忘记现在或将来的插入/删除).

我需要一个适用于任何方案的解决方案QGraphicsItem.

这是一个不起作用的事情列表:

  • 连接到QGraphicsScene (如QAbstractItemModel::rowsInserted())的信号- >没有.
  • 继承QGraphicsScene并重载虚拟通知程序函数(如QTabWidget::tabInserted()) - >没有.
  • 继承和重载addItem(),自己发送通知(如QMdiArea::addSubWindow()) - > addItem不是虚拟的,并从构造函数中调用QGraphicsItems.
  • 在新添加的事件上安装事件过滤器QGraphicsItems- >不知道如何获取新添加的项目,它将sceneEventFilter只能安装在其他项目上QGraphicsItems.
  • 连接到itemChange()QGraphicsItem- > itemChange是不是一个信号和重载QGraphicsItem是不是一种选择.
  • 换行QGraphicsScene(将场景作为私有成员)并且只显示函数addItemremoveItem- >但是QGraphicsItems在那个场景中仍然可以通过scene()函数访问它,所以这个解决方案不够安全.

如何获得有关项目更改的通知?

如果有一个我错过的简单方法,请指出我.另外,我非常欣赏这方面的想法.

Ste*_*Chu 2

我认为你能做的最好的事情就是连接到QGraphicsScene::changed()信号。

它不会告诉您更改/添加/删除了哪些项目,因为它旨在QGraphicsView更新显示。但您应该能够使用提供的区域找到答案。