You will not be able to get all the keys in QMainWindow, because QApplication may not be passing them on. To capture all the key events, you need install an event filter on the QApplication instance. Then you can have all the keys pressed, and then eat them, or pass them back.
Example:
{
Q_OBJECT
...
protected:
};
{
if (event
->type
() == QEvent::KeyPress) { QKeyEvent *keyEvent
= dynamic_cast<QKeyEvent
*>
(event
);
if(keyEvent)
qDebug() << "Key pressed " << keyEvent->key() << keyEvent->text();
}
// standard event processing
return QObject::eventFilter(obj, event
);
}
MainWindow
::MainWindow(QWidget *parent
){
...
// Filter installation on QApplication
QApplication::instance()->installEventFilter
(new KeySniffer
(this));
...
}
class KeySniffer : public QObject
{
Q_OBJECT
...
protected:
bool eventFilter(QObject * obj, QEvent * event);
};
bool KeySniffer::eventFilter(QObject * obj, QEvent * event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(event);
if(keyEvent)
qDebug() << "Key pressed " << keyEvent->key() << keyEvent->text();
}
// standard event processing
return QObject::eventFilter(obj, event);
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
...
// Filter installation on QApplication
QApplication::instance()->installEventFilter(new KeySniffer(this));
...
}
To copy to clipboard, switch view to plain text mode
Bookmarks