1

也许我只是愚蠢,但我已经阅读了 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”事件中使用这些函数。

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

4

2 回答 2

2

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

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

话虽如此,您实际上不必使用setCurrentBlockState. 您可以实现自己的方法来存储highlightBlock调用之间的状态。但是,setCurrentBlockState它提供了一种将整数与文本块相关联的有效方法。

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

于 2012-07-26T17:32:53.727 回答
2

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

于 2013-04-11T08:31:16.750 回答