Интерпретация QCloseEvent по-разному

У меня есть настольное приложение Windows, запрограммированное на C++ с помощью Qt. Приложение имеет несколько окон верхнего уровня, которые время от времени необходимо закрывать и создавать заново программно. Кроме того, когда пользователь программы нажимает кнопку закрытия (та, что рядом с кнопками свертывания и развертывания), предполагается, что вся программа завершается.

У меня проблема в том, что в обоих случаях окна верхнего уровня получают вызов closeEvent() с объектом QCloseEvent. Я хотел бы выйти из программы, когда увижу, что это произошло (потому что пользователь мог нажать кнопку закрытия), но также возможно, что окно закрывается, потому что я удаляю его программно, чтобы воссоздать его.

Есть ли способ различить эти два случая в QMainWindow::closeEvent()?


person Ted Middleton    schedule 14.06.2013    source источник


Ответы (2)


Есть ли способ различить эти два случая в QMainWindow::closeEvent()?

Да: событие закрытия, вызванное нажатием пользователем кнопки закрытия окна, будет спонтанным событием, а событие, вызванное вашим вызовом window->close(), — нет. См. документацию QEvent::spontaneous() для получения дополнительной информации.

person peppe    schedule 15.06.2013

Когда вам нужно программно закрыть окно, используйте deleteLater() вместо close. Окно будет закрыто и удалено. Чтобы снова открыть окно, вам нужно будет создать другой объект окна.

Вы также можете использовать метод hide(). Окно будет скрыто, но не уничтожено. Его можно снова показать с помощью show().

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

person Pavel Strakhov    schedule 15.06.2013