在我的项目中,我正在使用QGraphicsScene
并在代码中添加/删除项目。
现在,我想在添加或删除QGraphicsItem
时收到通知。许多Qt类具有通知信号或至少被调用此类更改的虚函数。我试图避免在许多地方添加许多行代码,这不仅麻烦而且不安全(忘记现在或将来的插入/删除)。
我需要一个适用于任何QGraphicsItem
的解决方案。
这是一个不起作用的事项清单:
QGraphicsScene
的信号(如QAbstractItemModel::rowsInserted()
) - >没有。QGraphicsScene
并重载虚拟通知程序函数(如QTabWidget::tabInserted()
) - >没有。addItem()
,自行发送通知(如QMdiArea::addSubWindow()
) - > addItem
不是虚拟的,而是从QGraphicsItems
的构造函数调用。QGraphicsItems
上安装事件过滤器 - >不知道如何获取新添加的项目,它只能是sceneEventFilter
,只能安装在其他QGraphicsItems
上。itemChange()
的{{1}} - > QGraphicsItem
不是信号并且重载itemChange
不是一种选择。QGraphicsItem
(将场景作为私有成员)并仅公开函数QGraphicsScene
和addItem
- >但该场景中的removeItem
仍然可以通过QGraphicsItems
函数访问它,因此此解决方案不够安全。如何收到有关商品更改的通知?
如果有一种简单的方法,我错过了,请指出我。另外,我非常欣赏这方面的想法。
答案 0 :(得分:0)
我认为你能做的最好的事情就是连接到QGraphicsScene::changed()
信号。
它不会告诉您哪些项目已更改/添加/删除,因为它旨在QGraphicsView
更新显示。但是你应该能够找到使用提供的区域。
答案 1 :(得分:0)
我意识到OP的要求之一是不将其归类,但我希望这仍对最终使用此方法的人有所帮助。 Qt正在发送事件来做到这一点,它只需要扩展for
方法以“得到通知”即可。然后,您可以像这里的示例一样插入回调方法,或提供信号,或任何您需要的东西。
这是在Python中,但我确定它与C ++中的模式相同:
def remove_adjacences(s):
n = ""
c = ''
for new_c in s:
if new_c != c:
n += new_c
c = new_c
return n