Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I disable Alt + F4 window closing using Qt?

I've disabled X button in Qt from my dialog using this line:

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

but I couldn't detect Alt + F4 using this code:

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

what should I do to detect Alt+F4 or disable it in Qt?

like image 550
Mohammad Sheykholeslam Avatar asked Apr 29 '12 05:04

Mohammad Sheykholeslam


2 Answers

Pressing Alt+F4 results in a close event being sent to your top level window. In your window class, you can override closeEvent() to ignore it and prevent your application from closing.

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

If you left the close button (X) visible, this method would also disable it from closing your app.

This is usually used to give the application a chance to decide if it wants to close or not or ask the user by displaying an "Are you sure?" message box.

like image 56
Arnold Spence Avatar answered Oct 12 '22 18:10

Arnold Spence


The code below prevents a dialog close when pressed Alt+F4, [X] or Escape, but not by calling SomeDialog::close() method.

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
}   

good luck to all of us ;)

like image 45
Alexander Chernin Avatar answered Oct 12 '22 20:10

Alexander Chernin