QT QSyntaxHighlighter - 什么是setCurrentBlockState角色?

时间:2012-07-26 16:54:58

标签: c++ qt qt4 syntax-highlighting

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

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

2 个答案:

答案 0 :(得分:2)

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

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

所有这些,你实际上不必使用setCurrentBlockState。您可以在highlightBlock次调用之间实现自己的状态存储方式。但是,setCurrentBlockState提供了一种将整数与文本块相关联的有效方法。

希望这能使事情变得清晰。

答案 1 :(得分:2)

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