Имеется некий документ, нужно перебрать его блоки, а в блоках перебрать фрагменты. И некоторые фрагменты, которые попадают под определенные условия, надо изменить. Они могут стать длиннее, чем исходные. Для изменения фрагмента берется позиция фрагмента в документе, и правится документ (ибо объекты фрагмента и блока в Qt не имеют методов модификации).
Проблема в том, что код изменения документа обернут двумя циклами - перебор блоков текста документа и перебор фрагментов в блоке. И если в процессе работы этих циклов будет меняться документ, то как поведут себя эти циклы? Будут ли они работать правильно?
QTextDocument textDocument=...;
// Перебор блоков текста
QTextBlock textBlock = textDocument.begin();
while(textBlock.isValid())
{
// Перебор фрагментов в блоке текста
QTextBlock::iterator it;
for(it = textBlock.begin(); !(it.atEnd()); ++it)
{
QTextFragment currentFragment = it.fragment();
int position=currentFragment.position();
//////////////////////////////////////////////
// Тут меняем textDocument в позиции position
//////////////////////////////////////////////
}
textBlock = textBlock.next();
}