아마 무슨 일이 일어나고 것은 당신이 가지고있다 범위를 벗어난 것입니다 객체.
뭔가 삭제, 또는 더 이상 접근하고 당신이 얻을 것이다 당신이 그것을 액세스 해보십시오.
두 가지 작업을 수행하십시오 :
Qt에서 개체를 만드는 경우 힙에 넣은 다음 개체 트리에서 부모 개체를 만듭니다. 예를 들어
:
QLabel * label = new QLabel(); // put it on the heap using new
ui->centralWidget()->layout()->addWidget(label);
레이블은 오브젝트 트리에서 지금이다. 레이블의 부모는 Layout 객체입니다. 그 부모는 중앙 위젯입니다. 그것의 부모는 UI 다.
창이 닫히면 모든 자식을 자동으로 정리합니다. 즉, 각각의 자식에 대해 삭제를 호출 할 필요가 없습니다.
가끔씩 예제는 힙에없는 것을 보여 주지만 다른 곳에서는 참조되지 않는 대화 상자와 같이 수명이 짧은 항목이 아니라면 큰 예제에서는 잘 작동하지 않습니다.
closeEvent()에서도 db에 대한 액세스를 정리해야합니다. 데이터베이스 예제를보고 핸들을 데이터베이스에 닫는 데 사용되는 코드 행을 찾으십시오.
정리 중이며 런타임에 사용할 수 없을 가능성이있는 경우 확인해야합니다.
if(label)
label->setText("I am closing now");
그리고 어떤 경우에는 포인터를 삭제하거나 닫은 후에 포인터를 0으로 설정할 수도 있습니다.
희망이 있습니다.
스택 프레임을 검사 해보십시오. gdb로 – Trevir
여기에 몇 가지 코드를 게시 할 수 있습니까? – PRIME
이 어셈블리를보고 문제가 무엇인지 알 수 없으면 컴퓨터를 버리고 프로그래밍을 포기해야합니다. D – dtech