在我的项目中,我使用QGraphicsScene
,并在代码中添加/删除项目。
现在,我想在添加或删除QGraphicsItem
时得到通知。许多Qt类具有通知信号或至少是在此类更改上被调用的虚函数。我试图避免在许多地方添加很多行代码,这不仅麻烦而且不安全(现在或将来忘记插入/删除)。
我需要一种适用于任何QGraphicsItem
的解决方案。
这是不起作用的列表:
QGraphicsScene
的信号(与QAbstractItemModel::rowsInserted()
中的信号相同]->没有。QGraphicsScene
,并重载了虚拟通知程序功能(如QTabWidget::tabInserted()
中的]->没有。)>addItem()
,我自己发送通知(与QMdiArea::addSubWindow()
中]addItem
不是虚拟的,并且从QGraphicsItems
的构造函数中调用。QGraphicsItems
上安装事件过滤器->不知道如何获取新添加的项目,它将是sceneEventFilter
,只能安装在其他QGraphicsItems
上。itemChange()
的QGraphicsItem
-> itemChange
不是信号,并且QGraphicsItem
不能过载。QGraphicsScene
(将场景作为私有成员),并且仅公开函数addItem
和removeItem
->,但是该场景中的QGraphicsItems
仍可以通过scene()
函数访问它,因此此解决方案不是足够安全。我如何获得物品变更通知?
[如果有一种简单的方法我想念了,请指出。否则,我非常感谢这方面的想法。
在我的项目中,我使用QGraphicsScene并在代码中添加/删除项目。现在,我想在添加或删除QGraphicsItem时得到通知。许多Qt类都有通知...
我认为您能做的最好是连接到QGraphicsScene::changed()
信号。
我意识到OP的要求之一是不将其归类,但我希望这仍对最终在这里的其他人有所帮助。 Qt正在发送事件来做到这一点,它只需要扩展QGraphicsView
方法以“获得通知”即可。然后,您可以像此处的示例一样插入回调方法,或提供信号,或任何您需要的东西。