现在,我想在添加或删除QGraphicsItem时收到通知.许多Qt类具有通知信号或至少在这些更改时调用的虚函数.我试图避免在许多地方添加许多行代码,这不仅麻烦而且不安全(忘记现在或将来的插入/删除).
我需要一个适用于任何QGraphicsItem的解决方案.
这是一个不起作用的事情列表:
>连接到QGraphicsScene的信号(如在QAbstractItemModel :: rowsInserted()中) – >空无一人.
>从QGraphicsScene继承并重载虚拟通知器函数(如在QTabWidget :: tabInserted()中) – >空无一人.
>继承和重载addItem(),自己发送通知(如在QMdiArea :: addSubWindow()中) – > addItem不是虚拟的,而是从QGraphicsItems的构造函数中调用.
>在新添加的QGraphicsItems上安装事件过滤器 – >不知道如何获取新添加的项目,它将是一个只能安装在其他QGraphicsItems上的sceneEventFilter.
>连接到QGraphicsItem的itemChange() – > itemChange不是信号并且重载QGraphicsItem不是一个选项.
>包装QGraphicsScene(将场景作为私有成员)并仅公开函数addItem和removeItem – >但是那个场景中的QGraphicsItems仍然可以通过scene()函数访问它,所以这个解决方案不够安全.
如何获得有关项目更改的通知?
如果有一个我错过的简单方法,请指出我.另外,我非常欣赏这方面的想法.
解决方法
QGraphicsScene::changed()
信号.
它不会告诉您哪些项目已更改/添加/删除,因为它旨在让QGraphicsView更新显示.但是你应该能够找到使用提供的区域.