微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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更新显示.但是你应该能够找到使用提供的区域.

原文地址:https://www.jb51.cc/css/215624.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。