Qt - Esc не должен закрывать диалог - PullRequest
16 голосов
/ 27 июня 2010

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

Ответы [ 4 ]

17 голосов
/ 27 июня 2010

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

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

Также обратите внимание на События и фильтры событий документы.

15 голосов
/ 05 мая 2012

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

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

Al_

3 голосов
/ 16 апреля 2013

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

MyDialog::reject(){
    if(some_closing_condition)
    {
        QDialog::reject() //calls the default close.
    }
    else
    {
        //skip reject operation
    }
}
1 голос
/ 27 июня 2010

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

Клавиша Escape

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

...