При очистки выделения высылается 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();