我在 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()
and endEditBlock()
一切正常。
请问,有谁知道为什么会这样吗?
有了这个条件block != endBlock
你的光标永远不会到达最后一个块。
你应该使用这个:
QTextBlock block = document->firstBlock();
while (block.isValid())
{
// do your stuff
block = block.next();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)