- All (478)
- jom (0)
- Qt Linguist (7)
- Qt Eclipse Integration (9)
- Qt Designer (7)
- Qt Creator (4)
- Qt build system: qmake (31)
- Qt build system: configure (3)
- Qt Assistant (5)
- Printing (4)
- Porting from Qt 3 to Qt 4 (1)
- Plugins (7)
- Qt Visual Studio AddIn (2)
- Qt/MFC Migration (2)
- QtScript (3)
- MDI (2)
- XML (1)
- Widgets (22)
- WebKit (5)
- Tools and Containers (2)
- Threads (2)
- Text Handling (10)
- SQL (6)
- QtTest (1)
- QtService (1)
- Platform: Windows (49)
- Platform: Unix (16)
- Platform: Mac OS X (18)
- Image Formats (2)
- I/O (2)
- Graphicsview (8)
- Font handling (9)
- Event System (18)
- Drag and Drop (4)
- Dialogs (6)
- Desktop integration (3)
- ActiveQt (3)
- Itemviews (60)
- Layout (4)
- Qt Quick (10)
- Qt SDK (1)
- Licensing (2)
- Platform: Embedded Linux (38)
- Painting (32)
- OpenGL (4)
- Object Model (6)
- Network (5)
- Multimedia (3)
- Miscellanous (23)
- Main Window (19)
- Look and Feel (23)
- Development (0)
- Getting Involved (0)
- Routines (0)
How can I catch Alt+F4 in my Qt application ?
Alt+F4 is a key combination controlled by Windows and Qt has no control over such system keys. What you can try to get around this is to start a QTimer to calculate the time from when Alt is pressed until the widget receives a closeEvent() [doc.qt.nokia.com]. If the closeEvent() [doc.qt.nokia.com] is received before e.g 300 msecs have passed, you can assume that Alt+F4 was pressed. See the following example for an illustration:
- #include <QtGui>
- {
- Q_OBJECT
- public:
- {
- altPressed = false;
- installEventFilter(this);
- }
- {
- if (altPressed) {
- qDebug() << "Alt + f4 was pressed, causing shutdown";
- } else {
- qDebug() << "Alt + f4 was not pressed. Shutting down for another reason";
- }
- }
- {
- altPressed = true;
- return false;
- }
- }
- }
- public slots:
- void testSlot()
- {
- qDebug() << "Only Alt was pressed";
- altPressed = false;
- }
- private:
- bool altPressed;
- };
- #include "main.moc"
- int main(int argc, char **argv)
- {
- MainWindow main;
- main.show();
- return app.exec();
- }

2 comments
December 5, 2010
Ant Farmer
That’s cool.
But why is it 300msec? Any reasoning behind this?
April 20, 2011
Hobby Entomologist
300 msec is just used as an example value. In this example we assume that it is unlikely that the user/system will have triggered a close event in a different way if we receive a close event 300 ms after Alt was pressed. This is just a suggested value though, it can of course be replaced by a value you find more suitable