QT QSyntaxHighlighter语言 - what's the setCurrentBlockState
QT QSyntaxHighlighter - what's the setCurrentBlockState role?
也许我很笨,但我已经在这里阅读了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)表示当前高亮显示状态,然后在为下一个块调用时匹配该索引是不够的。在这种情况下,必须维护每个多行规则的状态信息。
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Doees the 'this' 指针参与虚函数的多态行为
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 您将如何连接"on the fly"文本+整数并将其传递给函数?
- 如何理解"Temporary objs are destroyed as the last step in evaluating the full-expression"?谁能用一些简单的例子来说明这
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- Configuring the MPEG4MediaSink
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- What is the std::chrono::time_point equivalent of std::numer
- 如何在数据库程序中添加"reduce the quantity of an item"功能?
- 使用自定义 nodejs 插件时的"The specified module could not be found"
- Boost.Python 和导入 dll,"The specified module could not be found"
- "Build succeeded"但"The breakpoint will not currently be hit"
- 尝试应用肖恩父母谈话"inheritance is the base class of evil"中的模式
- 为什么'allocate in one library and free in the other'是错误的
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- Count the digits
- 加载安全区图像"A device attached to the system is not functioning"
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"