deleteRowFromTable

Разбираемся где вызывается функция deleteRowFromTable:

1. При стратегии редактирования OnRowChange вызывается в функция QSqlTableModel::removeRows.
Проверяется, что строка не находится в режиме вставки строки (insertIndex != -1).

2. При стратегии редактирования OnManualSubmit (только для строк кеша с признаком операции Delete) в функции submitAll.

В случае стратегии OnFieldChange  функция deleteRowFromTable не вызывается никогда (и это логично).

В случае успешного завершения removeRows (запрос к базе проходит нормально) в обоих случаях потом  вызывается select запрос к базе данных и таблица обновляется.

Таким образом в случае удаления строки НЕ надо опосля вызывать submit | submitAll.

Чтобы получить обратную связь и всегда знать, когда удалилась строка и изменения вступили в силу (отобразились на экране) надо переопределять функцию QSqlTableModel::removeRows в наследнике, проверять ее результат на true и все будет работать нормально.

Смотрите еще : updateRowInTable и insertRowIntoTable.