Jak przechwycić wszystkie zdarzenia klawiatury?

0

Do pustego okna QMainWindow dodałem eventFilter i w konstruktorze dodałem installEventFilter(this);

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    bool eventFilter(QObject* obj, QEvent* event) override
    {
        if (event->type()==QEvent::KeyPress||event->type()==QEvent::KeyRelease)
        {
           qDebug()<<event;
        }
        return QObject::eventFilter(obj, event);
    }

Naciskam przyciski LEWO,PRAWO,TAB

QKeyEvent(KeyPress, Key_Left)
QKeyEvent(KeyRelease, Key_Left)
QKeyEvent(KeyPress, Key_Right)
QKeyEvent(KeyRelease, Key_Right)
QKeyEvent(KeyPress, Key_Tab, text="\t")
QKeyEvent(KeyRelease, Key_Tab, text="\t")

dla mnie jest OK i nie mam uwag

Dodaje przyciski QButton i ponownie naciskam LEWO,PRAWO,TAB

QKeyEvent(KeyRelease, Key_Left)
QKeyEvent(KeyRelease, Key_Right)
QKeyEvent(KeyPress, Key_Tab, text="\t")
QKeyEvent(KeyRelease, Key_Tab, text="\t")

Do funkcji eventFilter nie trafiły zdarzenia KeyPress dla przycisków LEWO i PRAWO
TAB działa po staremu bo nie ma innych przycisków

Dodaje kolejny przyciski QButton i ponownie naciskam LEWO,PRAWO,TAB

QKeyEvent(KeyRelease, Key_Left)
QKeyEvent(KeyRelease, Key_Right)
QKeyEvent(KeyRelease, Key_Tab, text="\t")

LEWO,PRAWO,TAB powoduje zmianę elementu który dostaje fokus , czyli jest to funkcja Qt i większości przypadków ma to sens, tylko że ja chciałbym to czasami nadpisać.

Gdzie umieścić moja funkcję aby przejąc kontrolę nad klawiaturą , chciałbym we własny sposób oprogramować klawiaturę
(ze względu że to sprzęt embedded i mam dziwne wymagania)

Chyba brakuje mi KeyPreview z Delphi :D

6

To jest problem typu Focus-Pocus bug.
Event-y idą tam gdzie jest obecnie focus.

To powinno pomóc: https://doc.qt.io/qt-6/qwidget.html#grabKeyboard

1

grabKeyboard jest OK ! Dziękuje !

alternatywna metoda [1] to zainstalowanie eventFilter dla przycisków. ale to juz orka
alternatywna metoda [2] to zabawa z focusPolicy

1 użytkowników online, w tym zalogowanych: 0, gości: 1