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

标签 qt notifications signals qgraphicsitem qgraphicsscene

在我的项目中,我使用了 QGraphicsScene并在整个代码中添加/删除项目。

现在我想在收到 QGraphicsItem 时收到通知被添加或删除。许多 Qt 类具有通知信号或至少是在此类更改时调用的虚拟函数。我试图避免在许多地方添加多行代码,这不仅麻烦而且不安全(现在或将来忘记插入/删除)。

我需要一个适用于任何 QGraphicsItem 的解决方案.

这是不起作用的事情的列表:

  • 连接到 QGraphicsScene 的信号(如 QAbstractItemModel::rowsInserted() )-> 没有。
  • 继承自 QGraphicsScene并重载一个虚拟通知函数(如 QTabWidget::tabInserted() )-> 没有。
  • 继承和重载addItem() ,自己发送通知(如 QMdiArea::addSubWindow() )-> addItem不是虚拟的,并从 QGraphicsItems 的构造函数中调用.
  • 在新添加的 QGraphicsItems 上安装事件过滤器-> 不知道如何获取新添加的项目,它会是 sceneEventFilter只能安装在其他QGraphicsItems .
  • 连接到 itemChange()QGraphicsItem -> itemChange不是信号 AND 重载 QGraphicsItem不是一种选择。
  • 换行 QGraphicsScene (将场景作为私有(private)成员)并且只公开函数 addItemremoveItem -> 但是 QGraphicsItems在那个场景中仍然可以通过 scene() 访问它功能,所以这个解决方案不够安全。

  • 如何获得有关项目更改的通知?

    如果有一种我只是错过的简单方法,请指出我。否则,我非常感谢您对此的想法。

    最佳答案

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

    它不会告诉您更改/添加/删除了哪些项目,因为它适用于 QGraphicsView更新显示。但是您应该能够使用提供的区域找出答案。

    关于qt - 如何在 addItem 或 itemChange 上从 QGraphicsScene 获取通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13010629/

    相关文章:

    c++ - 在 Qt 4.8 中使用没有命名空间的 memcpy

    Android AlarmManager 在重启后继续/从 RecentTaskManager 中删除

    python - 在 django 中使用 pre_save 时取消保存模型

    c - 两个进程之间的顺序信号

    linux - 向父进程的另一个线程中生成的子进程发送 TERM 信号

    c++ - 为什么我需要将reinterpret_cast从 `long &`到 `int &`,其中两者都是32位(Windows LLP64)?

    c++ - 如何在 qmake 中配置编译器

    c++ - 无法更改 QSettings 的路径

    ios - 从 AppDelegate.swift 中的 didReceiveLocalNotification 推送 ViewController

    android - 如何将我的应用程序的通知声音添加到通知声音列表?