2017-12-11 13 views
0

QDialog에서 파생 된 사용자 정의 대화 상자를 만들었습니다. 대화 상자를 닫으면 소멸자가 호출되지 않습니다. 다음은 클래스 AWidget에있는 test 대화 상자를 여는 방법입니다. 내가이 대화 상자를 닫으면QDialog를 닫을 때 호출 소멸자가 Q에서 시작되었습니다.

//In AWidget: 
test = new myDialog(); 
test->show(); 
... 

, 대화 test가 (물론?)는 삭제되지 않습니다/파괴 : testAWidget의 구성원입니다.

나는 AWidget의 소멸자에서 그것을 할 수 있습니다

Destructor of AWdiget: 
delete test; 

myDialog

은 많은 메모리를 소모합니다. 사용자 동작은 myDialog을 열어서 작업하고 닫은 후 AWidget을 열어 두는 것입니다.

메모리를 닫는 방법/닫을 때 myDialog test의 소멸자를 호출합니까? 당신은 항상 대화를 삭제할 경우 닫은 후

void myDiaglog::closeEvent(QCloseEvent* event){ 
delete this; 
} 
+0

'~ MyDialog에()'AWdiget 소멸자 내부. – Ahtisham

+0

만약 내가 올바르게한다면, 이것은 기본적으로 지금 끝난 것입니다. 'onClosedListener'와 같은 것이 필요합니다 (...) {delete test; test = nullptr;} – DanK0904

답변

4

당신이 사용할 수 Qt::WA_DeleteOnClose :

차종

편집

는 더 나은 방법보다는 어쩌면 거기 위젯이 닫기 이벤트를 수락하면이 위젯을 삭제하십시오 (QWidget :: closeEvent() 참조).

//In AWidget: 
test = new myDialog(); 
test->setAttribute (Qt::WA_DeleteOnClose); 
test->show(); 
... 
+0

+ SUPER !!! setAttribute (Qt :: WA_DeleteOnClose); 감사합니다 :)) – Taz742