Hola eferion, sabía como funcionaban los delegados....porque ya me lo habías explicado
, lo que pasa es que cuando no me salen las cosas uno acaba sin saber dónde tiene la cara.
Bueno, lo he "solucionado" pero no estoy nada convencido de que esta sea una solución decente.
Al menos he podido delegar los eventos en los delegados (nunca mejor dicho) pero necesito conectar la señal
closeEditor() a la tabla.
En realidad lo que he hecho es capturar la tecla Tab en el editor del delegado, cuyas consecuencias son actualizar el dato de la celda y cerrar el editor
Código C++:
Ver originalcommitData(mieditor);
closeEditor(mieditor);
Por otro lado, he conectado la señal closeEditor a un slot que se encarga de mover el índice actual de la tabla. No parece un diseño muy aceptable
En fin, este sería el código de lo que he hecho finalmente (la implementación está incompleta pero todo parece pensar que va a funcionar)
en el delegado:
Código C++:
Ver originalbool MiDelegado::eventFilter(QObject * editor, QEvent * event)
{
if (!editor)
{
return false;
}
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Tab)
{
QLineEdit* mieditor = dynamic_cast<QLineEdit*>(editor);
commitData(mieditor);
closeEditor(mieditor);
return true;
}
}
return false;
}
La conexión SIGNAL/SLOT
Código C++:
Ver originalQObject::connect(delegado,SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)),this,SLOT(Posicionar()));
Y el código del SLOT (incompleto)
Código C++:
Ver originalvoid Widget::Posicionar()
{
QModelIndex current = ui->tableView->currentIndex();
qDebug()<<current.row()<<"<-->"<<current.column();
if (current.column()<ui->tableView->model()->columnCount(QModelIndex()))
{
QModelIndex newIndex = ui->tableView->model()->index(current.row(),current.column()+1);
ui->tableView->setCurrentIndex(newIndex);
}
}