删除对象从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)。

处理它的任何建议?

+0

是否调用'handleFinish()'槽?你正在破坏你的记忆。我认为这个问题是无法回答的,除非你提供[MCVE](https://*.com/help/mcve)。尝试通过临时移除析构函数中的语句和/或移除成员数据(在对象被销毁时被破坏)来隔离问题,并观察导致崩溃在注释掉时不会发生的语句/成员变量。 – Mike

当您收到destroyed信号时,该对象只有一个QObject - 而不是QWidget,并且绝对不是任何派生类型。您只能访问通过QObject提供的成员和方法,而不能通过任何其他类型。

看来您希望在小部件即将关闭时收到通知:为此,请安装一个事件过滤器,用于在小部件上拦截QEvent::close。另请参阅this answera discussion of why a closeEvent cannot be generally handled via a slot

+0

谢谢,看起来像我所需要的。 – JLev