2013-06-12 19 views
7

Kiedy próbuję zamknąć mój program Qt, po prostu działa on w tle, ale nie ma już okna.Jak poprawnie zamknąć program Qt?

Zasadniczo chciałbym wiedzieć, co powinienem zrobić, aby zamknął się poprawnie po kliknięciu czerwonego krzyża na moim głównym oknie (które nie ma rodzica).

Following this link, próbowałem kilka rzeczy jak:

QApplication app(argc, argv); 
//... 
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); 
return app.exec(); 

lub

QApplication app(argc, argv); 
//... 
app.setQuitOnLastWindowClosed(true); 
return app.exec(); 

ale żadna praca, proces nadal pozostaje w pamięci, po kliknięciu krzyż.

Następnie, jak mogę poprawnie zamknąć mój program?

Odpowiedz

8

Możesz zamknąć aplikację ręcznie przy użyciu QApplication::quit().

Domyślnie wykonywanie jest kończone, gdy ostatnie okno najwyższego poziomu z atrybutem Qt::WA_QuitOnClose zostało zamknięte. Nie musisz łączyć się z lastWindowClosed do quit, ponieważ powtarza domyślne zachowanie setQuitOnLastWindowClosed. Nie musisz wykonywać setQuitOnLastWindowClosed(true) ponieważ jest domyślnie prawdą. Opublikowany przez ciebie kod nic nie robi (jeśli nic nie jest zmieniane gdzie indziej).

Możliwe rozwiązania:

  • Sprawdź swoje główne atrybuty okna. Być może usunąłeś atrybut Qt::WA_QuitOnClose.
  • Jeśli ponownie wprowadzono closeEvent w oknie najwyższego poziomu, sprawdź, czy akceptacja zdarzenia zamknięcia jest akceptowana.
  • Sprawdź, czy istnieją inne widgety najwyższego poziomu, które mogą być ukryte, ale nie zamknięte. Użyj QApplication::topLevelWidgets(), aby je wyświetlić.
+0

Dzięki, spróbuję tego. Nie zrobiłem nic z atrybutem 'Qt :: WA_QuitOnClose', ale spróbuję ponownie zaimplementować' closeEvent() ', nie przeczytałem nic na ten temat podczas wyszukiwania. – JBL

+0

Nie, jeśli nie musisz ponownie wdrażać closeEvent, nie powinieneś tego robić. Domyślnie musi działać poprawnie. Miałem na myśli, że jeśli ponownie zaimplementujesz closeEvent, twoja implementacja może być niepoprawna. –

+0

Och, rzeczywiście. Cóż, w ogóle go nie zmieniłem ... Więc co powinienem zrobić? Muszę bezwzględnie polegać na 'QApplication :: quit()'? – JBL

Powiązane problemy