2

我在 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()一切正常。

请问,有谁知道为什么会这样?

4

1 回答 1

1

在这种情况下block != endBlock,您的光标将永远不会到达最后一个块。你应该使用这个:

QTextBlock block = document->firstBlock();
while (block.isValid())
{
    // do your stuff
    block = block.next();
}
于 2013-03-04T07:07:26.197 回答