Wie fangen Sie Strg+C, Schlüssel-Ereignis mit Qt, wenn die Strg-Taste ist freigegeben, bevor 'C'?
Möchte ich nennen einige benutzerdefinierte code kopieren, wenn der Benutzer releases Strg+C. Wenn Sie C wird veröffentlicht, bevor Sie Strg, Qt sendet ein wichtiges Ereignis entspricht, mit QKeySequence::Copy
. Wenn Sie Strg wird veröffentlicht, bevor Sie C, das release-Ereignis nicht übereinstimmen.
Wenn der key release event kommt mit Strg, gibt es einen Weg, um zu sehen, wenn Sie C ist immer noch nach unten gezogen wird?
Wenn ich nicht handle Strg wird erst veröffentlicht, der event wird weitergegeben, und es hat eine regelmäßige kopieren, das ist genau das, was ich nicht wollen, zu geschehen.
bool
MyWidget::eventFilter(QObject* object, QEvent* event)
{
//the text edit box filters its events through here
if (object == m_text_edit_box)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *key_event = static_cast<QKeyEvent*>(event);
if (key_event->matches(QKeySequence::Copy))
{
//don't do anything and don't pass along event
return true;
}
}
else if (event->type() == QEvent::KeyRelease)
{
QKeyEvent *key_event = static_cast<QKeyEvent*>(event);
if (key_event->matches(QKeySequence::Copy))
{
//we only get in here if 'c' is released before ctrl
callCustomCopy();
return true;
}
}
}
//pass along event
return false;
}
InformationsquelleAutor Nick McCowin | 2009-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man die Abfrage der Buchstaben 'C' und die meta-Taste 'Strg' - speziell und nicht sich verlassen auf key_even->Spiele(). natürlich können Sie in das Objekt, in dem Sie sich der eventfilter auf das keydown-Ereignis speichern, die Tatsache, ob das keydown-Sequenz hast, match zu kopieren.
Diese (ungetestet) könnte für Sie arbeiten, beachten Sie, dass die statische variable soll eine member-variable der Klasse, in der dieser enthalten ist, sind diese schien nur klarer in den Kontext der in diesem Beispiel. Die genaue Logik von dem, was Sie erreichen wollen, müssen möglicherweise weitere Informationen, durchgeführt werden, zwischen den Ereignissen.
Andere Möglichkeit wäre, zu erfassen, den aktuellen Zustand aller Tasten gedrückt und die aktuelle Zeit und dann, wenn man veröffentlicht sehen, welche sind immer noch gedrückt.
Aus UI-Sicht bitte beachten Sie, dass alle Tastatur-Aktionen ausgeführt werden, drücken Sie auf, (z.B. typeing, windows einfügen), die Durchführung von Aktionen auf den release im Allgemeinen könnte den Benutzer verwirren, besonders wenn es ist das sichtbare Ergebnis der Aktion. Ich kann nicht sagen, durch Ihr Beispiel, was Sie versuchen zu erreichen.
InformationsquelleAutor Harald Scheirich