2017-02-21 21 views
0

我使用一個對象繼承繼承了QWidget,爲了在關閉時就知道了,我用setAttribute(Qt::WA_DeleteOnClose),並連接刪除對象從QWidget中,WA_DeleteOnClose分段錯誤

connect(myObj,SIGNAL(destroyed(QObject*)),this,SLOT(handleFinish())); 

然而,當對象被刪除時,我得到munmap_chunk(): invalid pointer,當我查看指針的地址時,它是myObj的數據成員之一,它實際上不是指針。

我分配MyObj中動態,所以它應該是在堆上 - myObj = new myObj(); 的錯誤出現在MyObj中的析構函數的結束,我檢查了,這是第一次調用析構函數(看後When setting the WA_DeleteOnClose attribute on a Qt MainWindow, the program crashes when deleting the ui pointer)。

處理它的任何建議?

+0

是否調用'handleFinish()'槽?你正在破壞你的記憶。我認爲這個問題是無法回答的,除非你提供[MCVE](https://stackoverflow.com/help/mcve)。嘗試通過臨時移除析構函數中的語句和/或移除成員數據(在對象被銷燬時被破壞)來隔離問題,並觀察導致崩潰在註釋掉時不會發生的語句/成員變量。 – Mike

回答

1

當您收到destroyed信號時,該對象只有一個QObject - 而不是QWidget,並且絕對不是任何派生類型。您只能訪問通過QObject提供的成員和方法,而不能通過任何其他類型。

看來您希望在小部件即將關閉時收到通知:爲此,請安裝一個事件過濾器,用於在小部件上攔截QEvent::close。另請參閱this answera discussion of why a closeEvent cannot be generally handled via a slot

+0

謝謝,看起來像我所需要的。 – JLev