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

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