在我的项目中,我使用了 QGraphicsScene
并在整个代码中添加/删除项目。
现在我想在收到 QGraphicsItem
时收到通知被添加或删除。许多 Qt 类具有通知信号或至少是在此类更改时调用的虚拟函数。我试图避免在许多地方添加多行代码,这不仅麻烦而且不安全(现在或将来忘记插入/删除)。
我需要一个适用于任何 QGraphicsItem
的解决方案.
这是不起作用的事情的列表:
QGraphicsScene
的信号(如 QAbstractItemModel::rowsInserted()
)-> 没有。 QGraphicsScene
并重载一个虚拟通知函数(如 QTabWidget::tabInserted()
)-> 没有。 addItem()
,自己发送通知(如 QMdiArea::addSubWindow()
)-> addItem
不是虚拟的,并从 QGraphicsItems
的构造函数中调用. QGraphicsItems
上安装事件过滤器-> 不知道如何获取新添加的项目,它会是 sceneEventFilter
只能安装在其他QGraphicsItems
. itemChange()
的 QGraphicsItem
-> itemChange
不是信号 AND 重载 QGraphicsItem
不是一种选择。 QGraphicsScene
(将场景作为私有(private)成员)并且只公开函数 addItem
和 removeItem
-> 但是 QGraphicsItems
在那个场景中仍然可以通过 scene()
访问它功能,所以这个解决方案不够安全。 如何获得有关项目更改的通知?
如果有一种我只是错过的简单方法,请指出我。否则,我非常感谢您对此的想法。
最佳答案
我认为你能做的最好的就是连接到 QGraphicsScene::changed()
信号。
它不会告诉您更改/添加/删除了哪些项目,因为它适用于 QGraphicsView
更新显示。但是您应该能够使用提供的区域找出答案。
关于qt - 如何在 addItem 或 itemChange 上从 QGraphicsScene 获取通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13010629/