QPlainTextEdit に、すべての行が 10 個のスペースで始まるテキストがあります。
line1
line2
line3
line4
次に、いくつかの行を選択し、ループで選択したすべての行から最初の 2 つのスペースを削除します。
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();
問題は、上記のコードが最後に選択された行を「損傷」することです-まるである種の行末マーカーを削除したかのように-最後の行の終わりにジャンプしたいとき、カーソルはその下の行に移動します。 1番目と2番目のキャラクター。編集後、選択範囲でさえ正しく表示されません。最後の行を除くすべての行で選択インジケーターがウィンドウの右端まで拡張され、最後の行のインジケーターは行と同じ幅しかありません。
line1 < 1. selected lines, run the code
line2 <
line3 < < 2. here I jump to end of line
| line4
^ 3. cursor appears here
削除するbeginEditBlock()
と、endEditBlock()
すべて正常に動作します。
なぜこれが起こっているのか誰か知っていますか?