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

想要实现的功能

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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章