CSS   发布时间:2022-04-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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更新显示.但是你应该能够找到使用提供的区域.

大佬总结

以上是大佬教程为你收集整理的qt – 如何在addItem或itemChange上从QGraphicsScene获取通知?全部内容,希望文章能够帮你解决qt – 如何在addItem或itemChange上从QGraphicsScene获取通知?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。