在Qt MainWindow上设置WA_DeleteOnClose属性时,程序在删除ui指针时崩溃

时间:2010-06-30 20:30:58

标签: c++ qt qt4 segmentation-fault

我在MainWindow中设置了WA_DeleteOnClose小部件属性。

setAttribute(Qt::WA_DeleteOnClose);

然而,每当我关闭那个主窗口时,我的析构函数中都会出现一个段错误,它只有delete ui;

简而言之,在Creator中创建了一个Qt4 GUI应用程序,将setAttribute(Qt::WA_DeleteOnClose);添加到构造函数中,程序现在在退出时崩溃。

2 个答案:

答案 0 :(得分:10)

你是第一次或第二次在析构函数中遇到段错误吗?请记住,您的主窗口析构函数应该只运行一次。也就是说它应该运行 ,因为堆栈展开,因为WA_DeleteOnClose,而不是两者。

IIRC,Creator会将主窗口放在main()的堆栈上。因此,当main()返回时,主窗口将被销毁。

答案 1 :(得分:0)

this link提供了很好的解决方案建议。

我我认为最好的方法是将QPointer定义为指向obj并每次使用它测试NULL,因此,当UI obj被破坏时,指针将直接设置为NULL。 “ QPointer为QObject提供了受保护的指针。您可以使用它来保存对对话框的引用,并且在删除对话框时,该指针将自动设置为NULL。”