[solved] Wie mehrfache Modifier gleichzeitig?

Alles rund um die Programmierung mit Qt
Antworten
MADsCIENTIST

[solved] Wie mehrfache Modifier gleichzeitig?

Beitrag 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?
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?

Beitrag von Christian81 »

QKeyEvent::modifiers() bringt doch alle modifiers zurück...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
MADsCIENTIST

Re: Wie mehrfache Modifier gleichzeitig?

Beitrag 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!
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Wie mehrfache Modifier gleichzeitig?

Beitrag 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))
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Wie mehrfache Modifier gleichzeitig?

Beitrag von Christian81 »

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
MADsCIENTIST

Re: Wie mehrfache Modifier gleichzeitig?

Beitrag 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
Antworten