При очистки выделения высылается SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&))
и соответственно вызывается слот showSelectedItem( const QItemSelection & selected, const QItemSelection & deselected )
Ошибка скорее всего здесь:
void MainWindow::showSelectedItem( const QItemSelection & selected, const QItemSelection & deselected )
{
QModelIndexList list = selected.indexes(); //list=QModelIndexList(), т.к. выделение пустое
QModelIndex item;
item = list[0]; //выход за пределы списка
int row = item.row();
...
}
Если использовать list.at(0) - возникнет исключение, а так может на следующей строке.
Чтобы убедиться сделайте qDebug()<<selected.indexes();