6

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

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

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

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

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

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

4

1 回答 1

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_()
于 2016-11-10T12:22:49.153 回答