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

前端之家收集整理的这篇文章主要介绍了qt – 如何在addItem或itemChange上从QGraphicsScene获取通知?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的项目中,我正在使用QGraphicsScene并在代码添加/删除项目.

现在,我想在添加删除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更新显示.但是你应该能够找到使用提供的区域.

猜你在找的CSS相关文章