Qt - Esc не должен закрывать диалог

Как сделать ключ Esc для минимизации диалога? По умолчанию он закрывается. Должен ли я обрабатывать KeyEvent или есть лучший способ?

Ответ 1

Я думаю, вы можете использовать это:

MyDialog::keyPressEvent(QKeyEvent *e) {
    if(e->key() != Qt::Key_Escape)
        QDialog::keyPressEvent(e);
    else {/* minimize */}
}

Также смотрите Фильтры событий и событий.

Ответ 2

Побег вызывает reject(). Я переопределяю эту функцию (в моем случае не сворачивать диалог, а запрашивать сохранение)

void MyDialog::reject() {if(cleanupIsOK()) done(0);}

Al _

Ответ 3

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

MyDialog::reject(){
    if(some_closing_condition)
    {
        QDialog::reject() //calls the default close.
    }
    else
    {
        //skip reject operation
    }
}

Ответ 4

Я думаю, что для этого вам в основном пришлось бы наследовать от QDialog. Документация для QDialog гласит:

Escape Key

Если пользователь нажимает клавишу Esc в диалога QDialog:: reject() будет называется. Это приведет к тому, что окно close: закрыть событие не может игнорируются.