我在qplaintexttedit中有一些文本,其中每行以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()
时,一切都很好。
在block != endBlock
条件下,您的光标将永远不会到达最后一个块。你应该这样做:
QTextBlock block = document->firstBlock();
while (block.isValid())
{
// do your stuff
block = block.next();
}