为什么QT类QSyntaxHighlighter的highlightBlock(text)方法每次处理一行文本?

2024-10-04 03:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我一直在研究PyQt正则表达式测试仪,我需要突出显示匹配的结果。在

这是我的代码:

def highlightBlock(self, text):
    index = 0
    length = 0
    for item in self.highlight_data:
        index = text.indexOf(item, index + length)
        length = len(item)
        self.setFormat(index, length, self.matched_format)

在self.highlight_数据是一个存储匹配数据的列表,该方法迭代文本以查找并突出显示它们。但当匹配的数据包含'\n'(多行)时,结果将不会正确突出显示。在

当我调试代码时,我发现如果文本包含多行,highlightBlock(text)方法将被调用多次。每次参数文本都是一行数据。在

然后我把代码改成:

^{pr2}$

这将解决问题。在

我的问题是:为什么highlightBlock(text)方法每次处理一行?为什么不将整个文本(包括'\n')传送一次而不是一行多次传送?在


Tags: 数据方法代码textin文本selffor
1条回答
网友
1楼 · 发布于 2024-10-04 03:20:54

我想线索就在“highlightBlock”这个名字里。每当块的文本在文档中发生更改时,都会调用它。在

要引用QTextEdit的Qt文档:

QTextEdit works on paragraphs and characters. A paragraph is a formatted string which is word-wrapped to fit into the width of the widget. By default when reading plain text, one newline signifies a paragraph. A document consists of zero or more paragraphs. The words in the paragraph are aligned in accordance with the paragraph's alignment. Paragraphs are separated by hard line breaks.

因此,由于QTextEdit可以处理段落/块,QSyntaxHighlighter也应该这样做。在

相关问题 更多 >