[Qt4] EditKey im TableView ändern

Alles rund um die Programmierung mit Qt
Antworten
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

[Qt4] EditKey im TableView ändern

Beitrag 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
Zuletzt geändert von Manicboy am 15. November 2005 09:56, insgesamt 1-mal geändert.
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

void setEditTriggers(EditTriggers triggers)

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

HENNING
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

Re: [Qt4] EditKey im TableView ändern

Beitrag 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!
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Hmm... dann poste doch mal deinen keyPressed-Handler
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

Beitrag 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).
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

Beitrag 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;
		}
	}
}
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Scheint wirklich nicht deine Schuld zu sein.
Führt denn F2 immer noch dazu, dass eine Zelle editiert werden kann?

HENNING
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

Beitrag 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?
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag 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
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

Beitrag 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. :-)
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
Manicboy
Beiträge: 19
Registriert: 15. November 2005 08:27
Wohnort: Berlin
Kontaktdaten:

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

Beitrag 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
--
Who the fuck is general failure and why is he reading my harddisk?

"Intel inside" is not a trademark, it's a warning!!!
Antworten