Key-event außerhalb der GUI abfragen

Alles rund um die Programmierung mit Qt
Antworten
Hans_Wurst
Beiträge: 36
Registriert: 8. Mai 2008 16:44

Key-event außerhalb der GUI abfragen

Beitrag von Hans_Wurst »

Hallo,

ich kann wunderbar meine Tastatureingaben abfangen, indem ich einen EventFilter in meinem Konstruktor bekannt gebe und die entsprechende Methode implementiere.

Nun möchte ich jedoch jeden Tastendruck wissen, auch wenn er eintrifft, während sich der Mauszeiger außerhalb des GUI-Fensters befindet.

Kann mir jemand sagen was ich dafür anders machen muss? Mein bisheriger Code sieht in etwa so aus:

Code: Alles auswählen

test::test(QWidget *parent)
{
    ....
    this->installEventFilter(this);
    ....
}
bool test::eventFilter(QObject *watchedObj, QEvent *event)
{
    if (event->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

        if (keyEvent->key() == Qt::Key_Q)
        {
            // hier führe ich meine gewünschte Funktion aus
            return true;
        }
        ...
    }
    else
    {
        // standard event processing
        return QObject::eventFilter(watchedObj, event);
    }
}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Aua. Für was gibt es denn die ganzen *Event()-protected-Methoden in QWidget, und warum sind die auch noch virtual?
DIE solltest du implementieren! Bei einem KeyEvent implementierst du nach Lust und Laune keyPressEvent und/oder keyReleaseEvent. EventFilter ist interessant, wenn du ein Widget verwendest und bestimmte Events, die dieses Widget erhält, abfangen willst.

Und ein Widget erhält so lange Events, wie es Fokus hat. Wenn du "Fokus follows Mouse" in deinem WindowManager eingeschlaten hast, verliert dein Fenster den Fokus, sobald die Maus dieses verlässt.
Qt selber wird nur auf Klick den Fokus ändern. So kannst du die Maus aus nem TextEdit rausnehmen, und trotzdem tippen.

Grüße
Franz
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Und noch als kleiner Tipp, falls es dann mehrere Keys gibt, die abgefragt werden sollen: Eine switch/case Konstruktion ist da um einiges übersichtlicher ;)
Antworten