PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QTable - keyPressEvent



Gartenzwerg
21-05-2004, 07:16
Hi,
ich habe wie folgt das keyPressEvent überschrieben:


// Tastaturereignisse abfangen um TAB-Reihenfolge zu ändern
void CategoryTable::keyPressEvent(QKeyEvent* event)
{
qDebug("keyPressEvent");
// Wenn TAB-Taste gedrückt, letzte Spalte aktiv und noch mehrere Reihen vorhanden,
if((event->key() == Qt::Key_Tab)&&(currentColumn()>=(numCols()-1))&&(currentRow()<(numRows()-1)))
{
qDebug("setCurrentCell");
// aktive Zelle auf nächste Reihen erste Spalte setzen
setCurrentCell(currentRow()+1, 0);
}
qDebug("QTable::keyPressEvent");
QTable::keyPressEvent(event); // Aufruf der Implementation von QTable
}

Doch er geht nie in den if-Block. Das muss irgendwie an der Taste liegen, wenn ich nämlich statt Qt::Key_Tab, Qt::Key_Control o.ä. verwende funktioniert es. Ich hätte aber gerne die Tabulatortaste für diese Funktion. Wie kann ich dies erreichen?

Tschau Gartenzwerg

Gartenzwerg
24-05-2004, 06:22
kann mir keiner helfen?

Tschau Gartenzwerg

anda_skoa
24-05-2004, 20:49
Tab ist irgendwie eine spezielle Taste, aber du könntest mal versuchen, mit einem Eventfilter am Viewport Widget nach dem Tab zu sehen.

Ciao,
_

Gartenzwerg
25-05-2004, 05:31
Viewport? Meinst du das Widget, dass das Parent-Widget von der QTable ist?

Tschau Gartenzwerg

anda_skoa
25-05-2004, 16:27
QScrollView::viewport()

Ciao,
_

Gartenzwerg
25-05-2004, 18:29
Hi,
hab es jetzt wie folgt:


bool CategoryTable::eventFilter(QObject *watched, QEvent *event)
{
if(watched == viewport())
{
qDebug("EventFilter(viewport) - Start");
switch(event->type())
{
case QEvent::KeyPress:
{
qDebug("EventFilter(viewport) - Switch - KeyPress");
}
break;
default:
{
qDebug("EventFilter(viewport) - Switch - default");
}
break;
}
qDebug("EventFilter(viewport) - Ende");
}
return QTable::eventFilter(watched, event);
}

Doch er gibt mir immer aus:
EventFilter(viewport) - Start
EventFilter(viewport) - Switch - default
EventFilter(viewport) - Ende

Er geht nie in den case QEvent::KeyPress. Wieso nicht?
Müsste ich vielleicht die Tabulatortaste auch in den QTableItems abfangen?

Tschau Gartenzwerg

Gartenzwerg
02-06-2004, 05:31
jemand noch eine Idee? Oder einen Hinweis wo ich vielleicht noch fragen könnte, um die Lösung herauszubekommen?

Tschau Gartenzwerg

anda_skoa
02-06-2004, 12:28
Du kannst es noch auf qtforum.org probieren, aber ansich sollte es schon mit dem Eventfilter funktionieren, der Table benutzt den TabKey ja selbst auch.

Ciao,
_

Gartenzwerg
02-06-2004, 14:40
wie oben gepostet, geht er gar nicht in den case QEvent::KeyPress: - deshalb weiß ich auch nicht, wie ich ihn behandeln soll.

Im Konstruktor meiner QTable habe ich jetzt folgendes:


viewport()->installEventFilter(this);

und als eventFilter halt den obigen Code.

Tschau Gartenzwerg

P.S.: Werde es vielleicht im qtforum.org mal probieren.

Mertin
07-02-2005, 18:16
Es gibt eine Klasse namens "QAccel" mit der man Shortcuts und Acellerator (zB: STRG+F1) schreiben kann.

http://poolmgr.informatik.uni-freiburg.de/extern/doc/qt/qaccel.html



Mertin