Qt 使用QSyntaxHighlighter隐藏文本

Qt 使用QSyntaxHighlighter隐藏文本,qt,pyqt,syntax-highlighting,qtextdocument,qplaintextedit,Qt,Pyqt,Syntax Highlighting,Qtextdocument,Qplaintextedit,问题:我想为带有附加标记的文本实现一个文本编辑小部件。 我希望一些标签在某些情况下是不可见的,这样它们就不会分散用户的注意力 环境:我正在使用PyQt并且更喜欢使用QPlainTextWidget和QSyntaxHighlighter 方法:使用QSyntaxHighlighter我可以为符合我要求的字符串设置QTextCharFormatQTextCharFormat提供了所有字体属性,如大小、颜色等。但是:我没有找到隐藏文本或将其大小减小为零的选项 我不想删除或替换标记,因为这将引入更多的代

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

环境:我正在使用
PyQt
并且更喜欢使用
QPlainTextWidget
QSyntaxHighlighter

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

我不想删除或替换标记,因为这将引入更多的代码(复制应包含标记,没有标记,我无法使用
QSyntaxHighlighter
根据标记格式化剩余文本)

更新:到目前为止,我发现了一个丑陋的黑客。通过将QTextFormat::FontLetterSpacing设置为较小的值,文本将消耗越来越少的空间。与透明颜色相结合,文本有点不可见


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

您可以使用底层的
QTextDocument
进行此操作。它由可使用
setVisible
打开和关闭可见性的块组成。使用
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_()

嗯,纯文本就是纯文本。尝试使用非普通小部件。我在
QTextEdit
中找不到相应的选项。AFAIK的区别仅限于滚动行为、表格、框架和图像等。可以隐藏文本的函数与
QPlainTextEdit
的函数相同。除此之外,Qt中还有更多的高级类。qscintula意味着使用完全不同的东西。