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

来源:互联网 发布:淘宝助理批量宝贝描述 编辑:程序博客网 时间:2024/05/16 13:44

在开发过程发现子窗口的析构函数没有执行,后来查找发现,在创建对象的时候没有传递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)来调用父类析构函数。

0 1
原创粉丝点击