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();
}