Прервать 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());
}
Другие вопросы по тегам