Разбираемся где вызывается функция deleteRowFromTable:
1. При стратегии редактирования OnRowChange вызывается в функция QSqlTableModel::removeRows.
Проверяется, что строка не находится в режиме вставки строки (insertIndex != -1).
2. При стратегии редактирования OnManualSubmit (только для строк кеша с признаком операции Delete) в функции submitAll.
В случае стратегии OnFieldChange функция deleteRowFromTable не вызывается никогда (и это логично).
В случае успешного завершения removeRows (запрос к базе проходит нормально) в обоих случаях потом вызывается select запрос к базе данных и таблица обновляется.
Таким образом в случае удаления строки НЕ надо опосля вызывать submit | submitAll.
Чтобы получить обратную связь и всегда знать, когда удалилась строка и изменения вступили в силу (отобразились на экране) надо переопределять функцию QSqlTableModel::removeRows в наследнике, проверять ее результат на true и все будет работать нормально.
Смотрите еще : updateRowInTable и insertRowIntoTable.