Seite 1 von 1

[Qt 3] QGLWidget akzeptiert kein keyPressEvent

Verfasst: 8. Januar 2006 19:37
von kowi1134
Hallo!

In meiner Anwendung habe ich ein QGLWidget, dass auf verschiedene Knopfdrücke reagieren soll. Hierzu überschreibe ich die aus QWidget geerbte protected slots Methode

Code: Alles auswählen

void QWidget::keyPressEvent ( QKeyEvent * e ) [virtual protected]
Aber wie ich es auch drehe und wende, sie wird niemals aufgerufen, wenn ich einen Knopf drücke! Was wohl geht, ist die mousePressEvent Methode, aber die reicht mir eben nicht.

Dies ist meine QGLWidget Klasse:

Code: Alles auswählen

// Definition

class View : public QGLWidget
{
Q_OBJECT

// alle möglichen Methoden stehen hier noch

protected slots:
	void mousePressEvent ( QMouseEvent * e );
	virtual void keyPressEvent ( QKeyEvent * e );
	virtual void keyReleaseEvent ( QKeyEvent * e );

};

// Implementierung

void View::mousePressEvent ( QMouseEvent * e )
{
	qDebug("mouse pressed");
}


void View::keyPressEvent ( QKeyEvent * e )
{
	qDebug("key pressed");
}


void View::keyReleaseEvent ( QKeyEvent * e )
{
	qDebug("key released");
}
Weiß jemand, was ich falsch mache?

Kann es sein, dass ich erst irgendwie den Tastaturfokus auf das QGLWidget legen muss?

Verfasst: 8. Januar 2006 19:54
von heikob
Hallo,

du hast Recht. Das Widget muss den Fokus haben, wenn du die KeyEvents nutzen möchtest. Eventuell kann dir auch ein EventFilter helfen, um die entsprechenden Tasten abzufangen und alle weiteren Tasten dennoch nutzen zu können. Ich hoffe, ich konnte dir die nötigen Anregungen geben. Ansonsten, schreibe kurz nochmal etwas genauer, was du vo hast.

HeikoB

Verfasst: 8. Januar 2006 20:01
von kowi1134
Wo finde ich einen EventFilter?

Verfasst: 8. Januar 2006 21:15
von heikob
Hallo,

ich muss mich entschuldigen. Man sollte richtig lesen. Ich bin schon voll auf Qt4 eingestellt. Da gibt es EventFilter. In Qt3 könntest du, wenn du sonst keine Tastaturabfragen hast, den KeyboardFocus fest auf das GLWidget zu legen mit
glWidget->grabKeyboard();
http://doc.trolltech.com/3.3/qwidget.html#grabKeyboard

Vielleicht hilft dir das weiter.