删除继承自QWidget的对象,WA_DeleteOnClose分段错误

时间:2017-02-21 16:42:49

标签: c++ qt memory-management qwidget

我使用的对象继承了QWidget,为了知道它何时关闭,我使用了setAttribute(Qt::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之后)。

有任何处理它的建议吗?

1 个答案:

答案 0 :(得分:1)

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

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