Hall liebe Community,
ich versuche derzeit in einem Programm die Erkennung von mehreren aktiven Modifier-Keys ("CTRL", "RETURN", "ALT", etc.) zu nutzen, um eigene Tastenkombinationen realisieren zu können.
Bislang verwende ich für normale Keykombinationen ein QSet um darin die Keys zu speichern.
Im "keyPressEvent" wird der gerade gedrückte Key (außer Modifier) in das QSet gespeichert.
Bei einem "keyReleaseEvent" wird der vorher hinzugefügte Key wieder herausgenommen.
=> Somit kann ich meine eigenen Keykombinationen im "keyPressEvent" realisieren.
Ich kann zwar über das QKeyEvent Element abfragen, welcher Modifier im Augenblick gedrückt wird, jedoch funktioniert das nicht für mehrfache Modifier gleichzeitig!
Jetzt brauche ich das auch noch für die Modifier-Keys. Wie geht das?
[solved] Wie mehrfache Modifier gleichzeitig?
-
MADsCIENTIST
[solved] Wie mehrfache Modifier gleichzeitig?
Zuletzt geändert von MADsCIENTIST am 23. Juli 2013 23:03, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Wie mehrfache Modifier gleichzeitig?
QKeyEvent::modifiers() bringt doch alle modifiers zurück...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
MADsCIENTIST
Re: Wie mehrfache Modifier gleichzeitig?
OK, und warum erhalte ich für folgenden Quellcode nicht das richtige Resultat?
Der 2. Fall tritt ein, wenn ich ganz normal den "CTRL"-Key betätige.
Genau wie im 2. Fall verhält es sich mit dem "ALT"-Key.
=> Nur wenn ich beide gleichzeitig drücke tritt nie der 1. Fall ein, immer nur einer der anderen Fälle!
Code: Alles auswählen
// ...
// Key combinations for "CTRL" and/or "ALT"
if(event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::AltModifier) {
// CASE#1
if(event->modifiers() == Qt::ControlModifier && event->modifiers() == Qt::AltModifier)
std::cout << "CTRL + ALT pressed" << std::endl;
// CASE#2
else if(event->modifiers() == Qt::ControlModifier )
std::cout << "CTRL pressed" << std::endl;
// CASE#3
else
std::cout << "ALT pressed" << std::endl;
}
Genau wie im 2. Fall verhält es sich mit dem "ALT"-Key.
=> Nur wenn ich beide gleichzeitig drücke tritt nie der 1. Fall ein, immer nur einer der anderen Fälle!
Re: Wie mehrfache Modifier gleichzeitig?
Code: Alles auswählen
if(event->modifiers() == Qt::ControlModifier && event->modifiers() == Qt::AltModifier)
Siehe auch enum Qt::KeyboardModifier.
Richtig sollte sein:
Code: Alles auswählen
if( ((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) && ((event->modifiers() & Qt::AltModifier)== Qt::AltModifier))
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Wie mehrfache Modifier gleichzeitig?
Oder, da ein QFlags zurückkommt: http://qt-project.org/doc/qt-4.8/qflags.html#testFlag benutzen
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
MADsCIENTIST
Re: Wie mehrfache Modifier gleichzeitig?
Nein, mir war das keineswegs schon klar, da ich noch nicht so tief in der Materie drinnen bin^^
Jetzt funktioniert es auch endlich, vielen Dank noch mal!
Jetzt funktioniert es auch endlich, vielen Dank noch mal!