6

問題:タグを追加したテキスト用のテキスト編集ウィジェットを実装したいと考えています。ユーザーの気を散らさないように、場合によってはタグを非表示にしたいと思います。

環境:私はPyQtと を使用QPlainTextWidgetしてQSyntaxHighlighterいます。

アプローチ:自分の要件に一致する文字列をQSyntaxHighlighter設定できます。サイズ、色などのすべてのフォント プロパティが表示されますが、テキストを非表示にしたり、サイズをゼロにするオプションが見つかりませんでした。QTextCharFormatQTextCharFormat

タグを削除したり置き換えたりしたくありません。これにより、より多くのコードが導入されるためです (コピーにはタグを含める必要がありQSyntaxHighlighter、タグに従って残りのテキストをフォーマットするために使用することはできません)。

更新:これまでのところ、醜いハックを見つけました。QTextFormat::FontLetterSpacingを小さな値に設定することにより、テキストが消費するスペースがますます少なくなります。透明色と組み合わせることで、テキストは見えないようなものになります。

問題:私のテストでは、文字間隔が 0.016 % までしか機能しませんでした。間隔の下は 100% にリセットされます。

4

1 に答える 1

4

これには基になるものを使用できますQTextDocument。を使用して表示/非表示を切り替えることができるブロックで構成されていsetVisibleます。a を使用しQTextCursorて、テキストと新しいブロックを挿入し、可視性を切り替えます。おまけとして、コピー機能はとにかく見えないブロックの内容をコピーします。

注: 詳細については、のドキュメントを参照しQTextCursorてください。ここでの別の質問では、可視性の設定が機能していないことが報告されましたQTextEdits

例:

from PyQt5 import QtWidgets, QtGui

app = QtWidgets.QApplication([])

w = QtWidgets.QPlainTextEdit()
w.show()

t = QtGui.QTextCursor(w.document())
t.insertText('plain text')
t.insertBlock()
t.insertText('tags, tags, tags')
t.block().setVisible(False)

print(w.document().toPlainText())

app.exec_()
于 2016-11-10T12:22:49.153 に答える