Wheel Focus

Alles rund um die Programmierung mit Qt
Antworten
Bob23
Beiträge: 1
Registriert: 4. Januar 2009 18:56

Wheel Focus

Beitrag von Bob23 »

Hallo,

ich hab folgendes Problem wenn man über einer SpinBox am Mausrad dreht erhält diese den Focus. Ich möchte dies aber nicht sondern der Focus soll nur beim anklicken gesetzt werden. Über die FocusPolicy läst sich das Problem nicht lösen.

Ich hab mir eine SpinBox abgeleitet und das WheelEvent überschrieben und konnte so den Focus mit dem Mausrad abschalten. Nur leider funktoniert dann das ändern des Wertes über das Mausrad nicht mehr da nun beim Drehen sofort der Focus verloren geht. Weis hier jemand Rat.

Folgenden Code hab ich in meinem WheelEvent

Code: Alles auswählen

void wheelEvent(QWheelEvent *event)
	{
		if (!this->hasFocus())
			{
			  event->ignore();
			}
		else
			{
				if (event->delta() > 0)
					this->stepUp();
				else
					this->stepDown();
			}
		event->accept();
	}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Probiers mal mit dem QLineEdit.

QLineEdit * QAbstractSpinBox::lineEdit () const [protected]
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

Beitrag von XL »

Ich muss diesen alten Thread mal wieder ausgraben, da ich das (fast?) gleiche Problem auch habe.
Wenn focusPolicy = Qt::StrongFocus ist, dürfte die SpinBox doch gar keinen Focus über das MouseWheel kriegen, oder?

Es gibt dazu auch einen Bug-Report:
http://bugreports.qt.nokia.com/browse/Q ... y-tabpanel

Angeblich in Qt 4.6.3 behoben. Funktioniert bei mir aber nicht. Ich setze focusPolicy auf StrongFocus, aber die SpinBox reagiert trotzdem auf das Mausrad. Anschließend haben dann zwei Widgets den Focus bzw. es sieht zumindest so aus.

Wie genau wäre die Lösung mit dem LineEdit?
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

Beitrag von XL »

So, Erkenntnisgewinn ...
Auf das Mausrad zu reagieren und den Fokus zu erhalten scheinen zwei unabhängige Dinge zu sein. Wenn focusPolicy nicht Qt::WheelFocus ist, dann erhält die SpinBox (oder was auch immer) tatsächlich keinen Fokus über das Mausrad. Die SpinBox reagiert aber trotzdem auf das Mausrad (wheelEvent), indem sie Step-weise hoch bzw. runter zählt. Dabei wird der Text markiert, so dass es so aussieht als hätte die SpinBox den Fokus.
Unschön.

Ableiten eigener Klassen von allen Steuerelementen (zumindest SpinBox, DoubleSpinBox, ComboBox, ...) nur um nicht auf's Mausrad zu reagieren (wenn kein Fokus) finde ich sehr lästig.

Weiß jemand was einfacheres?
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

Beitrag von XL »

Falls es jemand braucht: Man kann eine Lösung finden mit eventFilter()
Antworten