я так понял, что эта функция фактически уже вызывается по факту - т.е. как запретить в ней переход, я не нашёл.
Только если ещё раз делать setCurrentItem(prev)? После чего опять вызовется она же.
Да, нужно вставлять "guards" от рекурсии.
Можно и по-другому. Перегружаем
C++ (Qt)
QModelIndex QAbstractItemView::indexAt ( const QPoint & point ) const [pure virtual]
в случае смены элемента по нажатию мыши
и
C++ (Qt)
QModelIndex QAbstractItemView::moveCursor ( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) [pure virtual protected]
в случае смены элемента по нажатию клавиатуры.
Имхо, других вариантов нет.