QTextCursor и beginEditBlock

У меня есть текст в QPlainTextEdit, где каждая строка начинается с 10 пробелов:

          line1
          line2
          line3
          line4

Затем я выбираю несколько строк и в цикле хочу удалить первые два пробела из всех выделенных строк:

cursor.beginEditBlock();
for (QTextBlock block = startBlock; block != endBlock; block = block.next()) {
    cursor.setPosition(block.position());
    cursor.setPosition(block.position() + 2, QTextCursor::KeepAnchor);
    cursor.removeSelectedText();
}
cursor.endEditBlock();

Проблема в том, что приведенный выше код "повреждает" последнюю выбранную строку - как если бы он удалил какой-либо маркер конца строки - когда я хочу перейти к концу последней строки, курсор перемещается на строку под ней, между первый и второй персонаж. Даже выделение не отображается должным образом после редактирования - все строки, кроме последней, имеют индикатор выделения, расширенный до правого края окна, а последняя строка имеет индикатор только шириной линии.

        line1    < 1. selected lines, run the code
        line2    <
        line3    <        < 2. here I jump to end of line
 |      line4

 ^ 3. cursor appears here

Когда я удаляю beginEditBlock() а также endEditBlock() все отлично работает

Пожалуйста, кто-нибудь знает, почему это происходит?

1 ответ

С этим условием block != endBlock Ваш курсор никогда не достигнет последнего блока. Вы должны использовать это:

QTextBlock block = document->firstBlock();
while (block.isValid())
{
    // do your stuff
    block = block.next();
}
Другие вопросы по тегам