Ver Mensaje Individual
  #16 (permalink)  
Antiguo 29/12/2016, 15:25
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Cómo evitar el modo de edición al avanzar con Tab

Bueno, pues parece que definitivamente he resuelto el problema.
La cosa está en crear el filtro de eventos para el delegado en cuestión. En mi caso, el delegado es simplemente un QLineEdit. Este filtro de eventos captura la tecla Tab y lo que hace es mandar las señales de cerrar el editor y enviar los datos.
Respecto al envío de la señal de cerrar el editor, es importante que no ponga en modo Edit el siguiente delegado:(QStyledItemDelegate::NoHint)

Además es importante que en caso de que se pulse la tecla deseada, retorne false. Esto permite a la tabla hacer uso de dicho evento (la pulsación de la tecla Tab en este caso será leída también por la tabla...o el widget que sea).

Aquí está la implementación de la función en la clase de mi delegado (que es una clase heredada de QStyledItemDelegate):
Código C++:
Ver original
  1. bool DelegadoNombre::eventFilter(QObject *obj, QEvent* event)
  2. {
  3.     if (event->type()==QEvent::KeyPress)
  4.     {
  5.         QKeyEvent* key = static_cast<QKeyEvent*>(event);
  6.         if (key->key()==Qt::Key_Tab || key->key()==Qt::Key_Enter || key->key()==Qt::Key_Return)
  7.         {
  8.             QLineEdit *editor=qobject_cast<QLineEdit*>(obj);
  9.             emit commitData(editor);
  10.             emit closeEditor(editor, QStyledItemDelegate::NoHint);
  11.         }
  12.         else
  13.         {
  14.             return QObject::eventFilter(obj, event);
  15.         }
  16.         return false;
  17.     }
  18.     else
  19.     {
  20.         return QObject::eventFilter(obj, event);
  21.     }
  22.     return false;
  23. }

Resumiendo, lo que estoy haciendo al pulsar Tab es cerrar el editor por medio de la señal closeEditor() especificando que no abra el siguiente, y pasar dicha pulsación dela tecla Tab a la tabla para que la gestione si es el caso.
__________________
Mi calculadora en Qt