addWidget自动将当前窗体设置为父级窗体,当前窗体析构时,widget也将被析构

孤街浪徒 提交于 2020-01-02 19:16:56

想要实现的功能

Fwidget作为一个全局变量,可以作为UI部件,显示到不同的窗体。具体操作如下:

1、在mainwindow中,创建一个私有变量(也可以叫做全局变量)Fwidget。

2、打开子窗体formA时,把Fwidget指针作为参数传入,通过布局管理器的addWidget把Fwidget作为子窗体formA的一部分显示。

  子窗体formA用完后,会被关闭,析构。

3、打开子窗体formB时,把Fwidget指针作为参数传入,通过布局管理器的addWidget把Fwidget作为子窗体formB的一部分显示。

  子窗体formB用完后,会被关闭,析构。

遇到的问题

执行到步骤3时,报错,发现Fwidget已经被析构了。

原因分析及解决办法

1、formA的布局管理器addWidget时,貌似会把当前formA设置为Fwidget的父级窗体。也即自动执行了代码,Fwidget->setParent(formA);  那么在父级窗体析构时,Fwidget也会被析构。

2、解决办法,就是在formA的析构函数,增加一行代码Fwidget->setParent(NULL);

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!