QT QSyntaxHighlighter语言 - what's the setCurrentBlockState

QT QSyntaxHighlighter - what's the setCurrentBlockState role?

本文关键字:the setCurrentBlockState QSyntaxHighlighter 语言 what QT      更新时间:2023-10-16

也许我很笨,但我已经在这里阅读了qt-richtext演示的文档(https://doc.qt.io/archives/qt-4.7/richtext-syntaxhighlighter.html)以及此处的setCurrentBlockState文档(https://doc.qt.io/archives/qt-4.7/qsyntaxhighlighter.html#setCurrentBlockState)但我仍然不明白"newState"是什么意思,以及这些函数是如何在"highlightBlock"事件中使用的。

有人能用简单的话启发我吗?

就Qt而言,newState没有任何意义;它是一个任意的整数。当您调用setCurrentBlockState时,QSyntaxHighlighter只会将newState整数与您在highlightBlock成员函数中使用的当前文本块相关联。换句话说,整数严格来说是一个用户值,可以用来表示任何您想要的值。

正如您发布的示例中所提到的,highlightBlock的问题在于,它只真正知道富文本引擎传递给它的当前文本块。如果您需要了解您处理的前一个文本块,则需要将这些信息存储在某个地方。因此,添加了setCurrentBlockState函数,这样您就可以存储有关正在处理的当前文本块的一些任意信息,这样以后调用highlightBlock就可以看到以前的调用在做什么。在这个例子中,有人提到,突出显示多行C++注释需要这样的功能才能正常工作。

尽管如此,您实际上不必使用setCurrentBlockState。您可以在highlightBlock调用之间实现自己的存储状态的方法。然而,setCurrentBlockState提供了一种将整数与文本块相关联的有效方式。

希望这能让事情变得清楚。

我想我已经意识到,如果有多行highlighting的多条规则,那么使用setCurrentBlockState()来记住多行高亮显示状态是不够的。假设您有某种类型的文件,其中有不同类型的多行语句,并且需要对这些语句进行不同的着色。然后,您需要为它们中的每一个维护当前和以前的状态。仅仅让多行的规则索引(+1)表示当前高亮显示状态,然后在为下一个块调用时匹配该索引是不够的。在这种情况下,必须维护每个多行规则的状态信息。

相关文章: