Seite 1 von 1

[solved] Wie mehrfache Modifier gleichzeitig?

Verfasst: 7. April 2013 17:18
von MADsCIENTIST
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?

Re: Wie mehrfache Modifier gleichzeitig?

Verfasst: 7. April 2013 17:40
von Christian81
QKeyEvent::modifiers() bringt doch alle modifiers zurück...

Re: Wie mehrfache Modifier gleichzeitig?

Verfasst: 7. April 2013 17:56
von MADsCIENTIST
OK, und warum erhalte ich für folgenden Quellcode nicht das richtige Resultat?

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;

}
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!

Re: Wie mehrfache Modifier gleichzeitig?

Verfasst: 7. April 2013 18:28
von veeman

Code: Alles auswählen

if(event->modifiers() == Qt::ControlModifier && event->modifiers() == Qt::AltModifier)
Dir ist schon klar das die obige Kombination ein Widerspruch in sich selbst ist?
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))

Re: Wie mehrfache Modifier gleichzeitig?

Verfasst: 7. April 2013 18:45
von Christian81
Oder, da ein QFlags zurückkommt: http://qt-project.org/doc/qt-4.8/qflags.html#testFlag benutzen

Re: Wie mehrfache Modifier gleichzeitig?

Verfasst: 7. April 2013 19:44
von MADsCIENTIST
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! :D