Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/11/2016, 05:42
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Qt. Cómo evitar el modo de edición al avanzar con Tab

Efectivamente. Para esa funcionalidad tienes que interceptar la pulsación del tabulador.

Esto lo puedes hacer heredando la tabla o mediante un filtro de eventos. Yo personalmente te recomendaría esta segunda opción:

Código C++:
Ver original
  1. class Filter : public QObject
  2. {
  3.   Q_OBJECT;
  4.  
  5.   public:
  6.  
  7.     bool eventFilter(QObject *object, QEvent *event) override;
  8.  
  9. };
  10.  
  11. bool Filter::eventFilter(QObject *object, QEvent *event)
  12. {
  13.   QTableView* table = dynamic_cast<QTableView*>(object);
  14.   if( !table ) return false;
  15.  
  16.   if (event->type() == QEvent::KeyPress)
  17.   {
  18.     QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
  19.     if (keyEvent->key() == Qt::Key_Tab)
  20.     {
  21.       QModelIndex current = table->currentIndex();
  22.       if( current.column() != table->model()->columnCount() )
  23.       {
  24.         QModelIndex newIndex = table->model()->index(current.row(),current.column()+1);
  25.         table->selectionModel()->select(newIndex,QItemSelectionModel::ClearAndSelect);
  26.         return true;
  27.       }
  28.     }
  29.   }
  30.   return false;
  31. }

Y para usarlo:

Código C++:
Ver original
  1. Filter* filter = new Filter;
  2. QTableView* table /* ... */;
  3. table->installEventFilter(filter);
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.