自动调用removeEventFilter()

时间:2018-02-05 14:55:05

标签: c++ qt

我想通过另一个对象(a)处理对象(b)的事件。我打电话给a->installEventFilter(b)。如果我删除了对象a,则说明会自动删除事件过滤器,即对象b不再接收要过滤a的事件。但我不知道如果我先删除对象b会发生什么,而a保持活动状态。如果我理解正确,那么文档就没有说明这种情况。是否会导致崩溃,因为对象a会将事件发送到已经死亡的b?或者这是安全的事情,因为事件过滤是以某种方式自动化的。去掉?或者我是否必须明确调用a->removeEventFilter(b),例如在b的析构函数中?

1 个答案:

答案 0 :(得分:2)

我看了一下Qt源代码,这是我在QObject中找到的:

ShowButton

QPointers是智能指针,当指向删除对象时,它们会变为null。所以说 - 你不必明确地调用<ShowButton basePath={"/${collectionable_type}/${collectionable.id}"} /> 。 Qt负责管理这个问题。

编辑:在这个答案中有一个假设 - Qt不会尝试使用null对象进行过滤(即使它确定它已被删除),因为我没有找到源代码或文档。