Hmm.

removeRows() is obviously wrong as it only ever removes one item, but that should have an impact on the initial listing.

clear() and updateDetails() could just use beginResetModel() and endResetModel() as they are changing the whole model.

Have you verified the model's implementation, e.g. with unit test?
You could also add a case for Qt::DisplayRole in data() and use the model with a widget QListView to rule out any QML/C++ interaction problems.

Cheers,
_