Seite 1 von 1

Status einer einzelnen Taste

Verfasst: 18. Dezember 2010 21:22
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?

Verfasst: 18. Dezember 2010 22:11
von upsala
Nein, gibt es nicht, außerdem würde ich es in einem QSet abspeichern.

Verfasst: 20. Dezember 2010 08:49
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

Verfasst: 20. Dezember 2010 09:36
von Razoron
Na gut, okay. Dann werde ich das wohl so speichern müssen. Auf eine platformabhängige Funktion steh ich nicht :).

Verfasst: 20. Dezember 2010 10:32
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]

Verfasst: 20. Dezember 2010 11:12
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.

Verfasst: 20. Dezember 2010 11:15
von Razoron
Man könnte es natürlich auch noch erweitern... Aber mir reicht das erstmal.