Status einer einzelnen Taste

Alles rund um die Programmierung mit Qt
Antworten
Razoron
Beiträge: 19
Registriert: 12. Dezember 2010 18:14

Status einer einzelnen Taste

Beitrag von Razoron »

Hi,
gibt es eine einfache Möglichkeit in Qt den status einer Taste abzurufen?
Also in etwa

Code: Alles auswählen

bool isPressed = qKeyState('s');
Oder muss ich doch alle events überladen und die Daten in nem Array speichern?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nein, gibt es nicht, außerdem würde ich es in einem QSet abspeichern.
Giesbert
Beiträge: 33
Registriert: 16. Oktober 2009 00:50
Wohnort: Hessdorf bei Erlangen
Kontaktdaten:

Beitrag von Giesbert »

Das musst du mit Betriebssystem Mitteln machen.
Unter Windows wäre das ::GetKeyState(...) http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Razoron
Beiträge: 19
Registriert: 12. Dezember 2010 18:14

Beitrag von Razoron »

Na gut, okay. Dann werde ich das wohl so speichern müssen. Auf eine platformabhängige Funktion steh ich nicht :).
Razoron
Beiträge: 19
Registriert: 12. Dezember 2010 18:14

Beitrag von Razoron »

Okay, ich habs gelöst. War eigentlich einfach :).

Code: Alles auswählen

#ifndef ZKEYBOARD_H
#define ZKEYBOARD_H

#include <QKeyEvent>
#include <QSet>

class ZKeyboard
{
private:
    QSet<qint32> keyboard;

public:
    ZKeyboard();
    ~ZKeyboard();

    void parseEvent(const QKeyEvent &event);

    bool key(int keyId);
};

#endif // ZKEYBOARD_H

Code: Alles auswählen

#include "zkeyboard.h"

// Constructor & Destructor
ZKeyboard::ZKeyboard()
{
}

ZKeyboard::~ZKeyboard()
{
}

// Public methods
void ZKeyboard::parseEvent(const QKeyEvent &event)
{
    switch(event.type())
    {
    case QEvent::KeyPress:
        if(keyboard.find(event.key()) == keyboard.constEnd())
        {
            keyboard.insert(event.key());
        }
        break;

    case QEvent::KeyRelease:
        if(keyboard.find(event.key()) != keyboard.constEnd())
        {
            keyboard.remove(event.key());
        }
        break;

    default:
        break;
    }
}

bool ZKeyboard::key(int keyId)
{
    return keyboard.find(keyId) != keyboard.constEnd();
}
[/code]
Giesbert
Beiträge: 33
Registriert: 16. Oktober 2009 00:50
Wohnort: Hessdorf bei Erlangen
Kontaktdaten:

Beitrag von Giesbert »

Und das ganze hängst du als event filter in die application ein?
Was ist mit Tasten die gedrückt waren, bevor die application getsartet war?

Das geht mit sicherheit für 95 % (wenn das lang is gut) ansonsten bekommst du auch net mit, wenn der focus auf eiuner anderen Applikationj liegt, eine taste gedrückt wird und der fikus zurück kommt.
Razoron
Beiträge: 19
Registriert: 12. Dezember 2010 18:14

Beitrag von Razoron »

Man könnte es natürlich auch noch erweitern... Aber mir reicht das erstmal.
Antworten