QT QSyntaxHighlighter - 什么是setCurrentBlockState角色?

问题描述 投票:1回答:2

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

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

c++ qt qt4 syntax-highlighting
2个回答
2
投票

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

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

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

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.