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意味着使用完全不同的东西。