Подтвердить что ты не робот

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

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

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

но я не смог обнаружить Alt + F4 с помощью этого кода:

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Приведенный ниже код предотвращает закрытие диалогового окна при нажатии 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
}   

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

Ответ 3

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

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