我使用的对象继承了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之后)。
有任何处理它的建议吗?
答案 0 :(得分:1)
当您收到destroyed
信号时,该对象只是QObject
- 而不是QWidget
,绝对不是任何派生类型。您只能访问通过QObject
提供的成员和方法,而不能通过任何其他类型访问。
似乎您希望在窗口小部件即将关闭时收到通知:为此,安装一个拦截窗口小部件QEvent::close
的事件过滤器。另请参阅this answer和a discussion of why a closeEvent
cannot be generally handled via a slot。