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

问题描述 投票:11回答:2

在我的项目中,我使用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()函数访问它,因此此解决方案不是足够安全。
  • 我如何获得物品变更通知?

[如果有一种简单的方法我想念了,请指出。否则,我非常感谢这方面的想法。

在我的项目中,我使用QGraphicsScene并在代码中添加/删除项目。现在,我想在添加或删除QGraphicsItem时得到通知。许多Qt类都有通知...

qt notifications signals qgraphicsitem qgraphicsscene
2个回答
1
投票

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


0
投票

我意识到OP的要求之一是不将其归类,但我希望这仍对最终在这里的其他人有所帮助。 Qt正在发送事件来做到这一点,它只需要扩展QGraphicsView方法以“获得通知”即可。然后,您可以像此处的示例一样插入回调方法,或提供信号,或任何您需要的东西。

© www.soinside.com 2019 - 2024. All rights reserved.