How to catch enter key/de: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
m (added language switch)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:German]]<br />[[Category:HowTo]]
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}


'''Deutsch''' [[How_to_catch_enter_key|English]]
[[Category:German]]
[[Category:HowTo]]


[toc align_right=&quot;yes&amp;quot;]
{{LangSwitch}}


= Enter- und Return-Tastendrücke abfangen =
= Enter- und Return-Tastendrücke abfangen =
Line 13: Line 14:
== Lösung ==
== Lösung ==


Qt erlaubt es glücklicherweise, die Event-Routine neu zu implementieren. Dazu benötigen wir eine neue Klasse, die eine Methode beinhaltet, die als Event-Filter eingesetzt werden kann:<br /><code><br />bool eventFilter(QObject *obj, QEvent *event);<br /></code>
Qt erlaubt es glücklicherweise, die Event-Routine neu zu implementieren. Dazu benötigen wir eine neue Klasse, die eine Methode beinhaltet, die als Event-Filter eingesetzt werden kann:
<code>
bool eventFilter(QObject *obj, QEvent *event);
</code>


Mehr ist auch gar nicht notwendig:<br /><code><br />class keyEnterReceiver : public QObject<br />{<br /> Q_OBJECT
Mehr ist auch gar nicht notwendig:
<code>
class keyEnterReceiver : public QObject
{
Q_OBJECT


protected:<br /> bool eventFilter(QObject *obj, QEvent *event);<br />};<br /></code>
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
</code>


Nun müssen wir noch die Methode implementieren:<br /><code><br />bool keyEnterReceiver::eventFilter(QObject *obj, QEvent *event)<br />{<br /> if(event-&gt;type() == QEvent::KeyPress)<br /> {<br /> QKeyEvent '''key = static_cast&amp;lt;QKeyEvent'''&gt;(event);
Nun müssen wir noch die Methode implementieren:
<code>
bool keyEnterReceiver::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent '''key = static_cast<QKeyEvent'''>(event);


if((key-&gt;key()  Qt::Key_Enter) || (key-&amp;gt;key()  Qt::Key_Return))<br /> {<br /> //Enter oder Return wurde gedrückt<br /> }<br /> else<br /> {<br /> return QObject::eventFilter(obj, event);<br /> }<br /> return true;<br /> }<br /> else<br /> {<br /> return QObject::eventFilter(obj, event);<br /> }
if((key->key()  Qt::Key_Enter) || (key->key()  Qt::Key_Return))
{
//Enter oder Return wurde gedrückt
}
else
{
return QObject::eventFilter(obj, event);
}
return true;
}
else
{
return QObject::eventFilter(obj, event);
}


return false;<br />}<br /></code>
return false;
}
</code>


Das ging jetzt ein bisschen schnell - daher hier noch eine ausführlichere Erklärung:
Das ging jetzt ein bisschen schnell - daher hier noch eine ausführlichere Erklärung:
Line 29: Line 61:
=== Tastendruck? ===
=== Tastendruck? ===


Erst wird überprüft, ob es sich überhaupt um ein KeyPress-Event handelt. Wenn nicht, soll Qt das Event-Handling übernehmen:<br /><code><br />bool keyEnterReceiver::eventFilter(QObject *obj, QEvent *event)<br />{<br /> if(event-&gt;type() == QEvent::KeyPress)<br /> {<br /> <br /> }<br /> else<br /> {<br /> return QObject::eventFilter(obj, event);<br /> }
Erst wird überprüft, ob es sich überhaupt um ein KeyPress-Event handelt. Wenn nicht, soll Qt das Event-Handling übernehmen:
<code>
bool keyEnterReceiver::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::KeyPress)
{
}
else
{
return QObject::eventFilter(obj, event);
}


return false;<br />}<br /></code>
return false;
}
</code>


=== Konvertierung ===
=== Konvertierung ===


Als Parameter haben wir ein QEvent erhalten. Daraus kann man aber keine Tastendrücke auslesen. Daher muss das Ganze noch in ein QKeyEvent konvertiert werden:<br /><code><br />QKeyEvent '''key = static_cast&amp;lt;QKeyEvent'''&gt;(event);<br /></code>
Als Parameter haben wir ein QEvent erhalten. Daraus kann man aber keine Tastendrücke auslesen. Daher muss das Ganze noch in ein QKeyEvent konvertiert werden:
<code>
QKeyEvent '''key = static_cast<QKeyEvent'''>(event);
</code>


=== Enter/Return oder eine andere Taste? ===
=== Enter/Return oder eine andere Taste? ===


Der Rest ist nicht besonders schwierig - jetzt muss nur noch überprüft werden, ob es sich um Enter handelt oder nicht:<br /><code><br />if((key-&gt;key()  Qt::Key_Enter) || (key-&amp;gt;key()  Qt::Key_Return))<br />{<br /> //Enter oder Return wurde gedrückt<br />}<br />else<br />{<br /> return QObject::eventFilter(obj, event);<br />}<br />return true;<br /></code>
Der Rest ist nicht besonders schwierig - jetzt muss nur noch überprüft werden, ob es sich um Enter handelt oder nicht:
<code>
if((key->key()  Qt::Key_Enter) || (key->key()  Qt::Key_Return))
{
//Enter oder Return wurde gedrückt
}
else
{
return QObject::eventFilter(obj, event);
}
return true;
</code>


=== Installation ===
=== Installation ===


Nun können wir unseren Event-Handler installieren:<br /><code><br />keyEnterReceiver *key = new keyEnterReceiver();<br />aWidgetInAnotherClass-&gt;installEventFilter(key);
Nun können wir unseren Event-Handler installieren:
<code>
keyEnterReceiver *key = new keyEnterReceiver();
aWidgetInAnotherClass->installEventFilter(key);

Latest revision as of 15:45, 15 April 2020

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

Enter- und Return-Tastendrücke abfangen

Überblick

Es gibt zahlreiche Anwendungen für das Abfangen von Enter-Tastendrücken, etwa eine Suchfunktion, die ausgelöst wird, wenn man die Enter-Taste drückt. Leider ist das nicht so einfach, wie andere Tasten abzufangen, da die übliche Event-Routine von Qt gewisse Tastendrücke bearbeitet, bevor das eigentliche Programm sie abfangen kann.

Lösung

Qt erlaubt es glücklicherweise, die Event-Routine neu zu implementieren. Dazu benötigen wir eine neue Klasse, die eine Methode beinhaltet, die als Event-Filter eingesetzt werden kann:

bool eventFilter(QObject *obj, QEvent *event);

Mehr ist auch gar nicht notwendig:

class keyEnterReceiver : public QObject
{
 Q_OBJECT

protected:
 bool eventFilter(QObject *obj, QEvent *event);
};

Nun müssen wir noch die Methode implementieren:

bool keyEnterReceiver::eventFilter(QObject *obj, QEvent *event)
{
 if(event->type() == QEvent::KeyPress)
 {
 QKeyEvent '''key = static_cast<QKeyEvent'''>(event);

if((key->key()  Qt::Key_Enter) || (key->key()  Qt::Key_Return))
 {
 //Enter oder Return wurde gedrückt
 }
 else
 {
 return QObject::eventFilter(obj, event);
 }
 return true;
 }
 else
 {
 return QObject::eventFilter(obj, event);
 }

return false;
}

Das ging jetzt ein bisschen schnell - daher hier noch eine ausführlichere Erklärung:

Tastendruck?

Erst wird überprüft, ob es sich überhaupt um ein KeyPress-Event handelt. Wenn nicht, soll Qt das Event-Handling übernehmen:

bool keyEnterReceiver::eventFilter(QObject *obj, QEvent *event)
{
 if(event->type() == QEvent::KeyPress)
 {
 
 }
 else
 {
 return QObject::eventFilter(obj, event);
 }

return false;
}

Konvertierung

Als Parameter haben wir ein QEvent erhalten. Daraus kann man aber keine Tastendrücke auslesen. Daher muss das Ganze noch in ein QKeyEvent konvertiert werden:

QKeyEvent '''key = static_cast<QKeyEvent'''>(event);

Enter/Return oder eine andere Taste?

Der Rest ist nicht besonders schwierig - jetzt muss nur noch überprüft werden, ob es sich um Enter handelt oder nicht:

if((key->key()  Qt::Key_Enter) || (key->key()  Qt::Key_Return))
{
 //Enter oder Return wurde gedrückt
}
else
{
 return QObject::eventFilter(obj, event);
}
return true;

Installation

Nun können wir unseren Event-Handler installieren: keyEnterReceiver *key = new keyEnterReceiver(); aWidgetInAnotherClass->installEventFilter(key);