我有一个GraphicsScene:public QGraphicsScene
继承的类,只有一个QGraphicsView
查看它并QTimer
,勾选调用函数
void GraphicsScene::adv()
{
if (actor)
views().at(0)->ensureVisible(actor,200,100);
advance();
}
advance()
是一种覆盖方法,可以发送到场景中的所有QGraphicsItem
个对象。这个功能的要点 - 我想确保actor
始终可见。
actor
是unit:public QGraphicsPixmapItem
上的GraphicsScene
个对象。
在actor
方法的某个时刻,我致电deleteLater()
。
下一个计时器刻度我在SEGFAULT
行
views().at(0)->ensureVisible(actor,200,100);
我想知道,为什么if (actor)
在true
之后以deleteLater()
传递,我应该使用哪种正确的条件?
答案 0 :(得分:0)
我有deleteLater()异步删除的对象 并想知道是否有办法阻止从其他人访问它 对象
是的,有一种方法可以使用QPointer<MyQObject>
作为described以编程方式判断对象是否已被删除。但是这种方式有点慢,你的应用程序代码应该有更好的逻辑来避免这种情况。比如,在调用deleteLater
之前,您的代码会删除该对象的引用,例如views()
,您的代码应检查该视图是否存在。
答案 1 :(得分:0)
如果您从deleteLater()
内部调用actor
,则容器GraphicsScene
仍然有指针 - 对象本身并不会重置所有外部指针。< / p>
您必须重置此指针 - actor
的成员GraphicsScene
才能在adv()
工作中获取您的if语句。