Seite 1 von 1

[Qt4] EditKey im TableView ändern

Verfasst: 15. November 2005 08:42
von Manicboy
Hallo,

eigentlich sind es 2 Probleme, die aber sich gegenseitig lösen können.

Ich habe ein Objekt von QTableView. Es ist so konfiguriert, dass nur per Mausklick oder über den EditKey eine Zelle in den Edit-Mode gebracht werden kann. Der EditKey ist auf F2 gelegt. Ich möchte aber mit der Enter/Return-Taste in den Edit-Mode. Wie kann ich den EditKey ändern???
Mein Versuch dies zu umgehen, war der Einsatz von keyPressEvent. Komischerweise reagiert der Handler nur beim Drücken der Enter-Taste am Num-Block. Auf die "normale" Enter-Taste reagiert er gar nicht. Als wenn die gar nicht existiert. Ich frage mit einer Switch-Anweisung sowohl Qt::Key_Enter als auch Qt::Key_Return ab. Hat jemand wegen dieses Problems vielleicht einen Tip??

Gruß
Manicboy

Verfasst: 15. November 2005 09:50
von klogg
void setEditTriggers(EditTriggers triggers)

Doku: http://doc.trolltech.com/4.0/qabstracti ... ggers-prop

HENNING

Verfasst: 15. November 2005 09:54
von Manicboy
mit dieser Funktion kann man nur einstellen, ob auf Doppelklick oder EditKey oder AnyKey etc. reagiert werden soll. Die Taste selbst lässt sich darüber nicht definieren

Manicboy

Verfasst: 15. November 2005 09:56
von FlorianBecker
Bei Key Event heißt die große Taste Return und die am Num Block Enter, das könnte dann das Problem in dem keyEvent lösen.

Re: [Qt4] EditKey im TableView ändern

Verfasst: 15. November 2005 09:58
von Manicboy
Manicboy hat geschrieben:... Ich frage mit einer Switch-Anweisung sowohl Qt::Key_Enter als auch Qt::Key_Return ab. ...
wie du siehst, frage ich beides ab!

Verfasst: 15. November 2005 10:01
von FlorianBecker
Mh, seltsame Sache, welche Version benutzt du? 4.0.1? Dann warte auf die 4.1.0 es gab bei meinen Sachen zu viele Fehler in 4.0.0 und 4.0.1, die genau solche Probleme mit falschen Tasten, oder EditTriggers einfach nicht händeln konnten.

Verfasst: 15. November 2005 10:03
von klogg
Hmm... dann poste doch mal deinen keyPressed-Handler

Verfasst: 15. November 2005 10:04
von Manicboy
jepp, Version 4.0.1 nutze ich

ein weiterer "lustiger" Effekt mit der Tastenabfrage ist, dass die Pfeiltasten nicht richtig abgefangen werden. Wenn ich in der Tabelle mich mit den Pfeiltasten von Zelle zu Zelle bewege, soll dabei was bestimmtes passieren. Komischerweise passiert es erst dann, wenn ich in einer Zelle am Rand der Tabelle bin und auch erst dann, wenn ich die Pfeiltaste Richtung Rand drücke (so als wenn ich über den Rand will).

Verfasst: 15. November 2005 10:06
von Manicboy
klogg hat geschrieben:Hmm... dann poste doch mal deinen keyPressed-Handler
hier ist er:

Code: Alles auswählen

void MyWidget::keyPressEvent(QKeyEvent *event)
{
	switch (event->key())
	{
		case Qt::Key_Enter:
		case Qt::Key_Return:
		{
			_TableIndex = _Table->currentIndex();
			_Table->edit(_TableIndex);
			break;
		}
		case Qt::Key_Left:
		case Qt::Key_Up:
		case Qt::Key_Right:
		case Qt::Key_Down:
		{
			_TableIndex = _Table->currentIndex();
			_Table->selectRow(_TableIndex.row());
			break;
		}
	}
}

Verfasst: 15. November 2005 10:09
von klogg
Scheint wirklich nicht deine Schuld zu sein.
Führt denn F2 immer noch dazu, dass eine Zelle editiert werden kann?

HENNING

Verfasst: 15. November 2005 10:15
von Manicboy
ja, F2 ist weiterhin als EditKey definiert

das Komische ist ja auch, dass bei der Return-Taste (also nicht die am Num-Block) der keyPressEvent-Handler gar nicht erst aufgerufen wird. Ich hab es per Debugger und Haltepunkt festgestellt. Ebenso wird der Handler bei dem Problem mit den Pfeiltasten nicht aufgerufen.
Gibt es da vielleicht ein Attribut für diese Tasten, dass gesetzt werden muss oder so?

Verfasst: 15. November 2005 10:24
von klogg
Aktivieren musste die glaub ich nicht.
Aber die Doku sagt:
A key event contains a special accept flag that indicates whether the receiver will handle the key event. You should call ignore() if the key press or release event is not handled by your widget. A key event is propagated up the parent widget chain until a widget accepts it with accept() or an event filter consumes it. Key events for multimedia keys are ignored by default. You should call accept() if your widget handles those events.
Daher wird F2 nock akzeptiert.
Ruf doch in deinen case Anweisungen mal event->accept() auf,
vielleicht klappt's dann...

HENNING

Verfasst: 15. November 2005 10:54
von Manicboy
hmm, geht nicht...aber das könnte daran liegen, dass er bei den genannten Tasten gar nicht erst in den Event-Handler reingeht.

Edit (11:30):
das Problem mit den Pfeiltasten kann man mit dem Event-Handler keyReleaseEvent umgehen.
Aber bei der Enter-Taste gibt es dafür ein anderes Problem. Da kommt man dann nicht mehr aus dem Edit-Mode raus. :-)

[teilweise gelöst] [Qt4] EditKey im TableView ändern

Verfasst: 23. November 2005 12:25
von Manicboy
So, nach dem anscheinend keiner etwas weiß, ein kleiner Tip, der das Problem mit dem EditKey zwar nicht direkt löst, es aber umgeht:

eigentlich das Einfachste auf der Welt, nämlich eine neue Klasse erstellen, die von QTableView erbt und dann die keyPressEvent-Funktion überschreiben, so dass auf die Enter/Return-Taste(n) entsprechend reagiert wird. Aber der EditKey ist immer noch F2. Also ist das eher eine halbherzige Lösung.

Gruß
Manicboy