0

QTextDocument からいくつかの段落を削除する必要があります。このトピックのコードを試しました: QTextEdit から行/ブロックを削除しますが、 QTextDocument.drawContents は削除されたブロックの代わりに空の行を出力します。

# create sample document
doc = QTextDocument()
cursor = QTextCursor(doc)
cursor.movePosition(QTextCursor.End)
cursor.insertText("First line\nSecond line\nThird line")

# now remove first line
cursor = QTextCursor(doc.findBlockByLineNumber(0))
cursor.select(QTextCursor.BlockUnderCursor)
cursor.removeSelectedText()

では、ブロックを完全に削除するにはどうすればよいでしょうか。

4

2 に答える 2

2

このスレッドが古いことは知っていますが、最近同じ問題に遭遇しました。deleteChar を続けて 2 回呼び出すと (最初のブロックに対してのみ実行した場合でも)、他の奇妙な動作が発生しました。

すべてのブロックに対して removeSelectedText に続いて deletaChar を呼び出すと、私が行っていたことが完全に機能することがわかりました。理由はわかりませんが、これが将来誰かに役立つことを願っています。

cursor = QTextCursor(doc.firstBlock())
cursor.select(QTextCursor.BlockUnderCursor)
cursor.removeSelectedText()
cursor.deleteChar()
于 2014-06-06T21:15:10.767 に答える
1

これは最初のブロックでのみ発生するため、バグだと思います。他のブロックは問題なく完全に削除されます。回避策を見つけました:

cursor = QTextCursor(doc.findBlockByLineNumber(0))
cursor.select(QTextCursor.BlockUnderCursor)
cursor.deleteChar()
cursor.deleteChar()

最初のブロックを削除する場合は、これを行う必要があります。他のブロックを削除したい場合は、オリジナルのコードを使用してください。

新しい QTextDocument を作成し、削除したいブロック以外のすべてのブロックをコピーするのが適切かもしれません。

于 2013-06-08T09:22:58.660 に答える