문제

나는 2 개의 창을 만들려고 노력하고있다. 두 번째는 1 일에 호출되어야합니다. 나는 그들을 어린이-부모를 연결하지 않습니다. 그러나 두 번째 창에 전화를 걸어 첫 번째 창도 닫았을 때도 닫혔습니다. 어떻게해야합니까? 두 창 모두 QWIDGET에서 상속됩니다. C ++ 및 QT


내 가난한 설명에 대해 죄송합니다. 나는 기본 창이 있습니다. Qmainwindow에서 상속 된 클래스. 두 번째 창을 만들었습니다. qwidget에서 상속 된 수업. 첫 번째 (메인 창)에서 두 번째 창을 만들고 호출하고 있습니다.

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

부모와 링크를 제공하지 않고. 모든 것이 잘 작동하지만 두 번째 창 (Config-Window)을 닫으면 기본 창도 닫힙니다. 나는 이것에 필요하지 않다. Config-Window 닫기 후 메인 창을 막으려면 어떻게해야합니까?

희망은 조금 더 잘 설명합니다.

내 첫 번째 창에는이 깃발이 있습니다.

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

그들 없이는 모든 것이 괜찮습니다. 창문에 깃발이 필요한 경우 무언가를 변경할 수 있습니까?

도움이 되었습니까?

해결책

당신은 다음과 같은 것이 필요합니다.

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

테스트 프로그램은 다음과 같습니다. http://pastebin.com/f5903c5f4.

이제 필요합니다. 이제 필요합니다 명시 적으로 전화 그만두다() 메인 창의 파괴자에서.

읽으면 Qapplication :: QuitonlastwindowClosed 문서, 당신은 그것을 알게 될 것입니다 :

이 속성이 참이면 QT :: WA_QUITONCLOSE 속성 세트가있는 마지막 보이는 기본 창 (예 : 부모가없는 창)이 닫히면 응용 프로그램이 종료됩니다. 기본적 으로이 속성은 하위 창을 제외한 모든 위젯에 대해 설정됩니다.

기본 창은 (프레임리스) 도구 창이기 때문에 계산됩니다. 이로 인해 Confindow는 유일한 비 하위 창으로 최고 수준의 위젯으로 남겨 둡니다. 따라서 ConfWindow를 닫으면 응용 프로그램 인스턴스가 종료되도록 자극합니다.

다른 팁

이것이 코드라면 QT에 큰 버그가 있습니다.
위의 코드는 첫 번째 창을 닫지 않아야합니다. 다른 잘못된 것이 있어야합니다.
응용 프로그램이 닫혀 있거나 충돌합니까?

주목
ConfigWindow를 누가 삭제하고 있습니까? 이있다 Qt::WA_DeleteOnClose 닫힌 후 창을 삭제하는 속성.

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top