Попробую.
А этот способ не работает:
Или нужно в QTextDocument искать QTextBlock (а ещё их может быть несколько!)
В каждом QTextBlock получать QTextLayout и вызывать setAdditionalFormats ?
setAdditionalFormats затирают формат.
А если получить у QTextLayout список FormatRanges, то там в некоторых случаях содержатся диапазоны форматов предыдущих данных (которые были до редактирования), а иногда вообще мусор.