2013-06-12 4 views
7

Когда я пытаюсь закрыть свою программу Qt, она просто работает в фоновом режиме, хотя больше нет окна.Как правильно закрыть программу Qt?

В принципе, я хотел бы знать, что я должен делать, чтобы он закрывался должным образом, когда я нажимаю красный крест в главном окне (у которого нет родителя).

Following this link, я попробовал несколько вещей, как:

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

или

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

но ни работа, процесс все еще остается в памяти после того, как крест щелкнул.

Затем, как я могу правильно закрыть свою программу?

ответ

8

Вы можете закрыть приложение вручную, используя QApplication::quit().

По умолчанию выполнение прекращается, когда последнее окно верхнего уровня с атрибутом Qt::WA_QuitOnClose было закрыто. Вам не нужно подключать lastWindowClosed к quit, потому что он повторяет поведение по умолчанию setQuitOnLastWindowClosed. Вам не нужно делать setQuitOnLastWindowClosed(true) либо потому, что по умолчанию это правда. Код, который вы опубликовали, ничего не делает (если ничего не изменилось в другом месте).

Возможные решения:

  • Проверьте основные атрибуты окна. Возможно, вы удалили атрибут Qt::WA_QuitOnClose.
  • Если вы переопределили closeEvent в своем окне верхнего уровня, проверьте, что событие закрытия принимается.
  • Проверьте, есть ли другие виджеты верхнего уровня, которые могут быть скрыты, но не закрыты. Используйте QApplication::topLevelWidgets(), чтобы их перечислить.
+0

Спасибо, я попробую это. Однако я ничего не сделал с атрибутом 'Qt :: WA_QuitOnClose', но я попытаюсь переопределить' closeEvent() ', я ничего не читал об этом во время поиска. – JBL

+0

Нет, если вам не нужно переопределять closeEvent, вы не должны этого делать. По умолчанию он должен работать нормально. Я имел в виду, что если вы повторно реализуете closeEvent, ваша реализация может быть неправильной. –

+0

О, действительно. Ну, я еще не переоценил его ... Итак, что мне тогда делать? Я должен полностью полагаться на 'QApplication :: quit()'? – JBL

Смежные вопросы