I could save the data from all dirty cells to some QMap.
Then call revertAll(), insert new rows into model and call submitAll().
And then copy unsaved data from the list back to the model.
But this solution is very ugly :( It seems that the only way is to inherit QSqlTableModel and to use insertRowIntoTable().
UPD. I have tried insertRowIntoTable(), unfortunately it inserts row into DB but not into model :(