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

Deleting object that inherits from QWidget, WA_DeleteOnClose segmentation fault

我正在使用继承 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 之后)。

有什么处理建议吗?

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

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