エディターでの改行の扱われ方

QPlainTextEditQEditTextなどのエディタークラスは文章をブロック単位で管理しています。

なので文章内の改行(\n\r)を置き換えようとしてもブロックに改行は含まれていないのでうまくいきません。

例えば次のように改行を取り除きたい場合などに問題になります。

QPlainTextEdit edit;
edit.insertPlainText("");
edit.insertPlainText(toPlainText().replace("\n", ""));
	///改行削除

なぜ文章内の改行が改行として認識されないかというとエディターは改行の代わりに PARAGRAPH SEPARATOR を使っているからです。

PARAGRAPH SEPARATORはユニコードで使われている改行コードの一種です。

UTF8では(0xe2809a)、UTF16では(U+2029)として定義されていてQCharではParagraphSeparatorとして参照することができます。

なので先ほどの改行を取り除く処理は次のように書き直せば期待したとおりに動きます。

QPlainTextEdit edit;
edit.insertPlainText("");
edit.insertPlainText(toPlainText().replace(QChar::ParagraphSeparator, ""));
	///改行削除

改行がParagraphSeparatorに変わっただけで普通の改行と同じように扱ってもOKです。

関連項目
プライバシーポリシー