Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/09/2016, 09:58
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: Qt.QTableView. Varias dudas

Hola eferion:

Bueno, pues el tema del borrado ya está resuelto, usando ahora el método selectionModel() de la tabla (el borrado de la celda no está implementado pero vamos, que la duda principal era que al pulsar la tecla hubiera dos comportamientos, en función de si está la fila seleccionada o no)

Voy ahora a corregir lo de los iconos.

Adjunto cómo tengo resuelto el filtro de eventos (todavía me peleo con github y la verdad es que cualquiera de estos ejemplillos es demasiado extenso para pegar aquí el código completo).

Código C++:
Ver original
  1. bool Widget::eventFilter(QObject *watched, QEvent *e)
  2. {
  3.     if (e->type() == QEvent::KeyPress)
  4.     {
  5.         QModelIndex indice = tabla->currentIndex();        
  6.         QKeyEvent *ke =static_cast<QKeyEvent*>(e);
  7.         switch (ke->key())
  8.         {
  9.         case (Qt::Key_F5):
  10.         {
  11.             modelo->insertRow(indice.row());
  12.             break;
  13.  
  14.         }
  15.         case (Qt::Key_Delete):
  16.         {          
  17.             if (tabla->selectionModel()->isRowSelected(indice.row(),QModelIndex()))
  18.             {
  19.                 modelo->removeRow(indice.row());
  20.             }
  21.             else
  22.             {
  23.                 qDebug()<<"Borrar celda";
  24.             }
  25.             break;
  26.         }
  27.         case (Qt::Key_Tab):
  28.         {          
  29.             QModelIndex ind;
  30.             if (indice.column() < modelo->columnCount(QModelIndex())-1)
  31.             {
  32.                 ind = modelo->index(indice.row(), indice.column()+1);
  33.             }
  34.             else if (indice.row() == modelo->rowCount(QModelIndex())-1
  35.                      && indice.column() == modelo->columnCount(QModelIndex())-1
  36.                      && !NombreVacio())
  37.             {
  38.                 modelo->insertRow(modelo->rowCount(QModelIndex()));
  39.                 ind = modelo->index(indice.row()+1,0);
  40.  
  41.             }
  42.             else if (indice.row() == modelo->rowCount(QModelIndex())-1
  43.                      && indice.column() == modelo->columnCount(QModelIndex())-1
  44.                      && NombreVacio())
  45.             {
  46.                 ind = modelo->index(indice.row(),indice.column());
  47.             }
  48.             else if (indice.column() == modelo->columnCount(QModelIndex())-1)
  49.             {
  50.                 ind = modelo->index(indice.row()+1,0);
  51.             }
  52.             tabla->setCurrentIndex(ind);
  53.             break;
  54.         }
  55.         case (Qt::Key_Up):
  56.         {
  57.             if (indice.row()>0)
  58.             {
  59.                 QModelIndex ind = modelo->index(indice.row()-1,indice.column(), QModelIndex());
  60.                 tabla->setCurrentIndex(ind);
  61.             }
  62.             break;
  63.         }
  64.         case (Qt::Key_Down):
  65.         {
  66.             if (indice.row() < modelo->rowCount(QModelIndex())-1)
  67.             {
  68.                 QModelIndex ind = modelo->index(indice.row()+1,indice.column(), QModelIndex());
  69.                 tabla->setCurrentIndex(ind);
  70.             }
  71.             else if (indice.row() == modelo->rowCount(QModelIndex())-1 && !NombreVacio())
  72.             {
  73.                 modelo->insertRow(modelo->rowCount(QModelIndex()));
  74.                 QModelIndex ind = modelo->index(indice.row()+1,indice.column(), QModelIndex());
  75.                 tabla->setCurrentIndex(ind);                
  76.             }
  77.             break;
  78.         }
  79.         case (Qt::Key_Left):
  80.         {
  81.             if (indice.column()>0)
  82.             {
  83.                 QModelIndex ind = modelo->index(indice.row(),indice.column()-1, QModelIndex());
  84.                 tabla->setCurrentIndex(ind);
  85.             }
  86.             break;
  87.         }
  88.         case (Qt::Key_Right):
  89.         {
  90.             if (indice.column() < modelo->columnCount(QModelIndex())-1)
  91.             {
  92.                 QModelIndex ind = modelo->index(indice.row(),indice.column()+1, QModelIndex());
  93.                 tabla->setCurrentIndex(ind);
  94.             }
  95.             break;
  96.         }
  97.         case (Qt::Key_F2):
  98.         {
  99.             qDebug()<<"Editar";
  100.             break;
  101.         }
  102.         default:
  103.         {
  104.             break;
  105.         }
  106.         }
  107.         return true;
  108.     }
  109.     return QWidget::eventFilter(watched, e);
  110. }

La idea es que si estoy situado en la última fila y le doy a la tecla hacia abajo, o estoy situado en la última fila y ultima columna, y le doy al tabulador, se cree una fila vacía que permita que sea rellenada. Pero si esa fila no tiene al menos el nombre relleno, no se seguirán creando más filas vacías al final.
Por otro lado, si lo que queremos es insertar una fila en cualquier otro sitio, se pulsaría la tecla F5.
__________________
Mi calculadora en Qt