Python 为什么QT类QSyntaxHighlighter的highlightBlock(text)方法每次处理一行文本?
最近我一直在做一个PyQt正则表达式测试,我需要突出显示匹配的结果 这是我的密码:Python 为什么QT类QSyntaxHighlighter的highlightBlock(text)方法每次处理一行文本?,python,qt,pyqt4,Python,Qt,Pyqt4,最近我一直在做一个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, le
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)方法将被调用多次。每次参数文本都是一行数据
然后我将代码更改为:
def highlightBlock(self, text):
index = 0
length = 0
for item in self.highlight_data:
if item.count('\n') != 0:
itemList = item.split('\n')
for part in itemList:
index = text.indexOf(part, index + length)
if index == -1:
index = 0
else:
length = len(part)
self.setFormat(index, length, self.matched_format)
else:
index = text.indexOf(item, index + length)
length = len(item)
self.setFormat(index, length, self.matched_format)
这将解决问题
我的问题是:为什么highlightBlock(文本)方法每次处理一行?为什么不将整段文字(包括“\n”)传输一次,而不是一行传输几次呢?我想线索就在名字中:“highlightBlock”。只要文档中的文本块发生更改,就会调用它 从Qt文档中引用以下内容: QTextEdit处理段落和字符。一段是一段 带格式的字符串,该字符串被字包装以适合文本的宽度 小装置。默认情况下,在读取纯文本时,一个换行符表示 段落文档由零个或多个段落组成。文字 在本段中,根据本段的 对齐段落之间用硬线分隔 因此,由于QTextEdit在段落/块上工作,QSyntaxHighlighter也应该这样做是很自然的