【问题标题】:QT QSyntaxHighlighter - what's the setCurrentBlockState role?QT QSyntaxHighlighter - setCurrentBlockState 的作用是什么?
【发布时间】:2012-07-26 16:54:57
【问题描述】:

也许我只是愚蠢,但我已经阅读了 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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,我刚刚意识到 highlightBlock(..&text) 接收到整行。该函数被多次调用,因此 setCurrentBlockState(number) 设置了一行上的数字。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2017-12-06
      • 2015-08-01
      相关资源
      最近更新 更多