删除对象从QWidget中,WA_DeleteOnClose分段错误
我使用一个对象继承继承了QWidget,为了在关闭时就知道了,我用setAttribute(Qt::WA_DeleteOnClose)
,并连接删除对象从QWidget中,WA_DeleteOnClose分段错误
connect(myObj,SIGNAL(destroyed(QObject*)),this,SLOT(handleFinish()));
然而,当对象被删除时,我得到munmap_chunk(): invalid pointer
,当我查看指针的地址时,它是myObj的数据成员之一,它实际上不是指针。
我分配MyObj中动态,所以它应该是在堆上 - myObj = new myObj();
的错误出现在MyObj中的析构函数的结束,我检查了,这是第一次调用析构函数(看后When setting the WA_DeleteOnClose attribute on a Qt MainWindow, the program crashes when deleting the ui pointer)。
处理它的任何建议?
当您收到destroyed
信号时,该对象只有一个QObject
- 而不是QWidget
,并且绝对不是任何派生类型。您只能访问通过QObject
提供的成员和方法,而不能通过任何其他类型。
看来您希望在小部件即将关闭时收到通知:为此,请安装一个事件过滤器,用于在小部件上拦截QEvent::close
。另请参阅this answer和a discussion of why a closeEvent
cannot be generally handled via a slot。
谢谢,看起来像我所需要的。 – JLev
是否调用'handleFinish()'槽?你正在破坏你的记忆。我认为这个问题是无法回答的,除非你提供[MCVE](https://*.com/help/mcve)。尝试通过临时移除析构函数中的语句和/或移除成员数据(在对象被销毁时被破坏)来隔离问题,并观察导致崩溃在注释掉时不会发生的语句/成员变量。 – Mike