Подтвердить что ты не робот

Как сделать очистку при выходе в Qt

Я хочу сделать некоторые вещи для дома (например, запись в файл и т.д.) в приложении Qt до выхода приложения. Как я могу добраться до этой функции (выход или что-то еще называется) в Qt?

4b9b3361

Ответ 1

Вам необходимо подключить слот с кодом очистки до сигнала QCoreApplication::aboutToQuit().

Это позволяет вам удалить QObjects с помощью QObject::deleteLater(), и объекты будут удалены, так как вы еще не покинули основной цикл событий приложения.

Если вы используете библиотеку C, для которой требуется вызов "shutdown", вы обычно можете это сделать после возврата из QCoreApplication::exec().

Пример для обоих методов:

int main(int,char**)
{
  QApplication app;
  library_init();
  QWidget window;
  window.show();
  QObject::connect(&app, SIGNAL(aboutToQuit()), &window, SLOT(closing()));
  const int retval = app.exec();
  library_close();
  return retval;
}

Ответ 2

Что касается ответа Сайласа Паркера, то в документации Qt говорится о сигнале aboutToQuit:

Сигнал особенно полезен, если ваше приложение должно последняя-вторая очистка. Обратите внимание, что в этом невозможно взаимодействие с пользователем состояние.

Если вы хотите, чтобы ваше приложение могло отменить процесс выхода или разрешить пользователю выполнять последнее изменение до закрытия приложения, вы можете сделать это, выполнив функцию closeEvent в MainWindow.

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (maybeSave()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
}

Дополнительную информацию см. в документации closeEvent.