用QSyntaxHighlighter隐藏文本

m2j*_*m2j 6 qt syntax-highlighting pyqt qtextdocument qplaintextedit

问题:我想为带有附加标签的文本实现文本编辑小部件.我希望某些标签在某些情况下不可见,这样它们就不会分散用户的注意力.

环境:我正在使用PyQt并且更喜欢使用QPlainTextWidgetQSyntaxHighlighter.

方法:QSyntaxHighlighter我可以设置QTextCharFormat为符合我的要求,该字符串.QTextCharFormat给了我所有字体属性,如大小,颜色等,但是:我没有找到隐藏文本或将其大小减小到零的选项.

我不想删除或替换标签,因为这会引入更多代码(复制应该包含标签,而不能QSyntaxHighlighter用于根据标签格式化剩余的文本).

更新:到目前为止,我发现了一个丑陋的黑客.通过将QTextFormat :: FontLetterSpacing设置为较小的值,文本将占用越来越少的空间.与透明色相结合,文字就像隐形.

问题:在我的测试中,这仅适用于低至0.016%的字母间距.间距下方重置为100%.

Tri*_*ion 4

QTextDocument您可以为此使用底层。它由块组成,其可见性可以使用 打开和关闭setVisible。使用 aQTextCursor插入文本和新块并切换可见性。作为奖励,复制功能无论如何都会复制不可见块的内容。

注意:请参阅的文档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_()
Run Code Online (Sandbox Code Playgroud)