您的位置:首页 > 编程语言 > Qt开发

Qt Widget和Dialog区别和使用,QWidget一闪而过

2015-03-17 11:12 1446 查看
在开发过程发现子窗口的析构函数没有执行,后来查找发现,在创建对象的时候没有传递this指针

例如Model *model = new Model();和Model *model = new Model(this);this指针没有传递,因此无法调用子对象的析构函数。

当子对象定义为指针,会出现因为没有被释放而无法被释放的现象,当关闭子窗体时不会调用析构函数,只有关闭父窗体时,才会调用子窗体的析构函数,可以设置this->setAttribute(Qt::WA_DeleteOnClose)来调用父类析构

回到QWidget和QDialog的问题上,当我把子对象QWidget定义为指针时,因为父对象被关闭,导致子对象的指针无法被释放,析构函数不能被执行。而把QWidget子对象定义为局部变量的时候,窗口却一闪而过,因为子对象作为布局变量,很快就是系统释放了,所以窗口一闪而过。

当子窗口继承QDialog的时候,因为QDialog起了一个事件循环exec,不会出现窗口一闪而过的现象。

因此,当子窗口继承QWidget的时候,一定要注意指针的传递,如果父对象被关闭,可以通过设置子窗口this->setAttribute(Qt::WA_DeleteOnClose)来调用父类析构函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: