Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Январь 18, 2016, 23:07



Название: Перебор блоков и фрагментов QTextDocument при изменении этого QTextDocument
Отправлено: xintrea от Январь 18, 2016, 23:07
Имеется некий документ, нужно перебрать его блоки, а в блоках перебрать фрагменты. И некоторые фрагменты, которые попадают под определенные условия, надо изменить. Они могут стать длиннее, чем исходные. Для изменения фрагмента берется позиция фрагмента в документе, и правится документ (ибо объекты фрагмента и блока в 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();
  }


Название: Re: Перебор блоков и фрагментов QTextDocument при изменении этого QTextDocument
Отправлено: kambala от Январь 19, 2016, 14:24
сломаются вероятнее всего.

можно модифицировать копию документа, итерируя при этом по исходному документу, а потом ею заменить исходный документ.


Название: Re: Перебор блоков и фрагментов QTextDocument при изменении этого QTextDocument
Отправлено: Dimka Novikov от Январь 20, 2016, 10:22
Или бегать по документу при помощи QTextCursor.