Прервать QCloseEvent
В моем приложении я обрабатываю QCloseEvent (когда была нажата кнопка закрытия X):
void MainWindow::closeEvent(QCloseEvent* event)
{
if ( !isAbortedFilestoSave() ) {
this->close();
}
// else abort
}
Предложение if запускается, когда не было нажато прерывания. Я хотел бы реализовать предложение else, где QCloseEvent прерывается? Как?
1 ответ
Решение
Вы должны использовать ignore()
на событие "прервать его" - чтобы Qt знал, что вы не хотите, чтобы виджет действительно закрывался.
Функция isAccepted() возвращает true, если получатель события согласился закрыть виджет; вызовите accept(), чтобы согласиться закрыть виджет, и вызовите ignore(), если получатель этого события не хочет закрывать виджет.
Также не нужно звонить close()
Вы сами - кнопка "X" уже делает это, поэтому вы получаете закрытое событие!
Итак, ваш код должен быть:
void MainWindow::closeEvent(QCloseEvent* event)
{
// accept close event if are not aborted
event->setAccepted(!isAbortedFilestoSave());
}