删除继承自 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。
我正在使用继承 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
小部件的事件过滤器。另见 closeEvent
cannot be generally handled via a slot。