Globale Events, z.B. KeyBoard-Events lassen sich mit QT zentral abfangen, in dem man einen globalen EventFilter
installiert:
QCoreApplication::instance()->installEventFilter(mainWindow);
"mainWindow
" ist in diesem Fall einfach unser Hauptfenster, kann aber ein beliebiges Objekt vom Typ "QObject
" sein. In diesem überschreibt man einfach die Methode "eventFilter
":
<mainwindow.h>
bool eventFilter(QObject *watched, QEvent *event);
Die Implementierung erfolgt im Beispiel so:
<mainwindow.cpp>
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
Q_UNUSED(watched);
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyevent = (QKeyEvent*)event;
if ((keyevent->modifiers()==Qt::ALT) && (keyevent->key() == Qt::Key_F1))
{
qDebug() << "Global Key Event catched";
}
}
return false;
}
Das Objekt wird anschließend als EventFilter installiert:
MainWindow* mainWindow = new MainWindow();
QCoreApplication::instance()->installEventFilter(mainWindow);