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 originalbool Widget::eventFilter(QObject *watched, QEvent *e)
{
if (e->type() == QEvent::KeyPress)
{
QModelIndex indice = tabla->currentIndex();
QKeyEvent *ke =static_cast<QKeyEvent*>(e);
switch (ke->key())
{
case (Qt::Key_F5):
{
modelo->insertRow(indice.row());
break;
}
case (Qt::Key_Delete):
{
if (tabla->selectionModel()->isRowSelected(indice.row(),QModelIndex()))
{
modelo->removeRow(indice.row());
}
else
{
qDebug()<<"Borrar celda";
}
break;
}
case (Qt::Key_Tab):
{
QModelIndex ind;
if (indice.column() < modelo->columnCount(QModelIndex())-1)
{
ind = modelo->index(indice.row(), indice.column()+1);
}
else if (indice.row() == modelo->rowCount(QModelIndex())-1
&& indice.column() == modelo->columnCount(QModelIndex())-1
&& !NombreVacio())
{
modelo->insertRow(modelo->rowCount(QModelIndex()));
ind = modelo->index(indice.row()+1,0);
}
else if (indice.row() == modelo->rowCount(QModelIndex())-1
&& indice.column() == modelo->columnCount(QModelIndex())-1
&& NombreVacio())
{
ind = modelo->index(indice.row(),indice.column());
}
else if (indice.column() == modelo->columnCount(QModelIndex())-1)
{
ind = modelo->index(indice.row()+1,0);
}
tabla->setCurrentIndex(ind);
break;
}
case (Qt::Key_Up):
{
if (indice.row()>0)
{
QModelIndex ind = modelo->index(indice.row()-1,indice.column(), QModelIndex());
tabla->setCurrentIndex(ind);
}
break;
}
case (Qt::Key_Down):
{
if (indice.row() < modelo->rowCount(QModelIndex())-1)
{
QModelIndex ind = modelo->index(indice.row()+1,indice.column(), QModelIndex());
tabla->setCurrentIndex(ind);
}
else if (indice.row() == modelo->rowCount(QModelIndex())-1 && !NombreVacio())
{
modelo->insertRow(modelo->rowCount(QModelIndex()));
QModelIndex ind = modelo->index(indice.row()+1,indice.column(), QModelIndex());
tabla->setCurrentIndex(ind);
}
break;
}
case (Qt::Key_Left):
{
if (indice.column()>0)
{
QModelIndex ind = modelo->index(indice.row(),indice.column()-1, QModelIndex());
tabla->setCurrentIndex(ind);
}
break;
}
case (Qt::Key_Right):
{
if (indice.column() < modelo->columnCount(QModelIndex())-1)
{
QModelIndex ind = modelo->index(indice.row(),indice.column()+1, QModelIndex());
tabla->setCurrentIndex(ind);
}
break;
}
case (Qt::Key_F2):
{
qDebug()<<"Editar";
break;
}
default:
{
break;
}
}
return true;
}
return QWidget::eventFilter(watched, e);
}
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.