最近我一直在研究一個PyQt正則表達式測試器,我需要突出顯示匹配的結果。爲什麼QT類QSyntaxHighlighter的highlightBlock(text)方法每次處理一行文本?
這裏是我的代碼:
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_data是存儲匹配數據的列表,並且該方法重複文本找到他們,並突出顯示它們。但是當匹配的數據包含'\ n'(多行)時,結果將不會正確突出顯示。
當我調試代碼時,如果文本包含多行,我發現highlightBlock(文本)方法會被多次調用。每次參數文本都是一行數據。
然後,我改變了我的代碼:
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')一次而不是一行轉換多次?