Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么QT类QSyntaxHighlighter的highlightBlock(text)方法每次处理一行文本?_Python_Qt_Pyqt4 - Fatal编程技术网

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

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

最近我一直在做一个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)方法将被调用多次。每次参数文本都是一行数据

然后我将代码更改为:

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也应该这样做是很自然的