QT - KeyBoardEvent
-
guten morgen liebe community.
ich sitze jetzt schon etwas länger an einem (hoffentlich) kleinen Problem.
Ich möchte gerne die Eingabe von der Tastatur abfangen.
Mittels dem Event keyPressEvent sollte das gehen.Nur was ich kann machen was ich will... Er führt die Funktion nicht aus...
Ich hab den Fokus (setFocusPolicy(Qt::StrongFocus)) auf das Fenster gesetzt jedoch springt er nicht in die Methode:
cgame.cpp
void CGame::keyPressEvent(QKeyEvent* e) { cout<<"bla"<<endl; e->ignore(); }
der dazugehörige header:
cgame.h
class CGame : public QWidget { Q_OBJECT public: static CGame& instance() { static CGame _Instanz; return _Instanz; } ~CGame(); . . . protected: void keyPressEvent(QKeyEvent* e); . . . };
Könnt ihr mir vielleicht weiter helfen?
Danke vorab.
-
Sofern du den Druck nicht vollkommen abfangen willst, füge doch in keyPressEvent noch die Weiterleitung an QWidget ein:
QWidget::keyPressEvent(event);
Dann stell sicher, dass dein Fenster wirklich den Fokus hat und der Tastendruck nicht an ein übergeordnetes Widget geht. Falls es ein solches Widget gibt, versuch mal dort den Tastendruck abzufangen.
Was soll das eigentlich machen?
cout<<"bla"<<endl;
Falls das eine Art Kontrolle sein soll (Debugger wäre auch eine Idee ;)), dann füge doch lieber etwas ein, dass du garantiert siehst. Ein
this->close();
zum Beispiel. Oder ein blockierendes Fenster:
QMessageBox msgBox(this); msgBox.setText("Der Tastendruck wurde abgefangen!"); QPushButton * buttonOk = msgBox.addButton("Ok" , QMessageBox::AcceptRole); msgBox.setDefaultButton(buttonOk); msgBox.setWindowTitle("Wichtige Nachricht an den Meister"); msgBox.exec();
Rein von deinem Code würde ich sagen, dass das ganze funktionieren muss. Du hast wohl irgendeine Rahmenbedingung nicht erfüllt (oder dein Test funktioniert nicht).
-
Hallo Leute, auch wenn es ein wenig später ist, aber ich habs geschafft
ich hoffe meine Lösung hilft noch anderen Codern.
Zu meiner Lösung:
1. Ich habe einiges vergessen zu sagen
Ich programmiere in der MVC-Struktur (Model-View-Control).
und bei der Erstellung eines neuen View bildete ich ein QWidget, welches ich späterhin anzeigen ließ. jedoch konnte ich diese Fenster nicht mit einem pressKeyEvent versehen. Nur Chuck Norris weiß warum...
Ich hab einfach meine Klasse View von QWidget erben lassen und siehe da, es funkioniert.Also dann!
Happy coding!