用QSyntaxHighlighter隐藏文本

时间:2012-01-24 21:32:46

标签: qt pyqt syntax-highlighting qtextdocument qplaintextedit

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

环境:我正在使用PyQt,而更喜欢使用QPlainTextWidgetQSyntaxHighlighter

方法:使用QSyntaxHighlighter我可以为符合我要求的字符串设置QTextCharFormatQTextCharFormat为我提供了所有字体属性,如大小,颜色等。 但是: 我没有找到隐藏文字或缩小文字大小的选项零。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

注意:有关详细信息,请参阅QTextCursor的{​​{3}}。在documentation中,据报道,设置可见性不适用于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_()