вы также можете использовать фильтры событий и повторно реализовать eventFilter для управления изменениями индекса, например:
MyWidget::MyWidget(QWidget* parent) : QWidget(parent), ui(new Ui::uiClass)
{
ui->setupUi(this);
ui->tableView->installEvenFilter(this);
connect( ui->tableView, SIGNAL(activated(QModelIndex)), this,SLOT(manageNewIndex(QModelIndex)));
}
bool MyWidget::eventFilter(QObject* watched, QEvent* event)
{
bool retVal = true;
if(watched == ui->tableView && event->type() == QEvent::KeyPress)
{
QModelIndex index = ui->tableView->currentIndex();
int row = index.row();
int col = index.column();
if(((QKeyEvent*)event)->key() == Qt::Key_Down)
{
index = index.sibling(row+1,col);
}else if(((QKeyEvent*)event)->key() == Qt::Key_Up)
{
index = index.sibling(row-1,col);
}
if(index.isValid())
{
ui->tableView->setCurrentIndex(index);
manageNewIndex(index);
}
retVal = true;
}
else
retVal = QWidget::eventFilter(watched,event);
return retVal;
}