首先做一個假設:我們要實現一個程序,程序中有一個MainWindow,MainWindow中有一個DockWidget。在點DockWidget的關閉按鈕的時候,需要在MainWindow中進行一些處理,然後釋放DockWidget。何以實現?
我想到的是:在DockWidget類中聲明一個信號,並把這個信號連接到MainWindow類中的處理函數removeDockWidget(), 最後重載closeEvent函數,在closeEvent中發送這個信號。
而在removeDockWidget()中,我是這樣寫的:
void MainWindow::removeDockWidget()
{
/******************************
* some function deal with other things
* ……
……
……
*****************************/
delete dockWidget; //release the space assigned to DockWidget
}
在調試的時候,雖然DockWidget的析構函數可以被調用來析構這個類,但是會有如下兩個debug信息:
QObject: Do not delete object, 'qt_dockwidget_closebutton', during its event handler!
QObject: Do not delete object, 'unnamed', during its event handler!
下面給出這個錯誤的解決方法:
不用delete直接釋放空間,而改用QObject::deleteLater()函數來釋放空間。