Russian Qt Forum
Ноябрь 24, 2024, 03:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перебор блоков и фрагментов QTextDocument при изменении этого QTextDocument  (Прочитано 3134 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Январь 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();
  }
Записан

Собираю информацию по крупицам
http://webhamster.ru
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Январь 19, 2016, 14:24 »

сломаются вероятнее всего.

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Dimka Novikov
Гость
« Ответ #2 : Январь 20, 2016, 10:22 »

Или бегать по документу при помощи QTextCursor.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.