Как отключить закрытие окна Alt + F4 с помощью Qt?

Я отключил кнопку X в Qt из моего диалога, используя эту строку:

myDialog->setWindowFlags(Qt::Dialog | Qt::Desktop)

но я не мог обнаружить Alt + Ф4 используя этот код:

void myClass::keyPressEvent(QKeyEvent *e)
{
    if ((e->key()==Qt::Key_F4) && (e->modifiers()==Qt::AltModifier))
        doSomething();
}

что я должен сделать, чтобы обнаружить Alt+Ф4 или отключить его в Qt?

3 ответов


клавишей Alt+F4 приводит к тому, что событие close отправляется в окно верхнего уровня. В вашем классе window вы можете переопределить closeEvent() игнорировать его и предотвратить закрытие приложения.

void MainWindow::closeEvent(QCloseEvent * event)
{
    event->ignore();
}

Если вы оставили кнопку закрытия (X) видимой, этот метод также отключит его от закрытия вашего приложения.

это обычно используется, чтобы дать приложению шанс решить, хочет ли она рядом или нет, или спросить пользователя, отображая "вы уверены?" сообщение коробка.


приведенный ниже код предотвращает закрытие диалога при нажатии Alt+F4, [X] или Escape, но не путем вызова метода SomeDialog::close ().

void SomeDialog::closeEvent(QCloseEvent *evt) {
    evt->setAccepted( !evt->spontaneous() );
}   

void SomeDialog::keyPressEvent(QKeyEvent *evt) {
    // must be overridden but empty if the only you need is to prevent closing by Escape
}   

удачи всем нам ;)


также вы можете обрабатывать событие в классе вашего диалога (по крайней мере, если это модальный dlg):

void MyDialog::closeEvent(QCloseEvent* e)
{
    if ( condition )
       e->ignore();
    else
       __super::closeEvent(e);
}