在一个QPlainTextEdit中使用多个QSyntaxHighlighter

6

我写了两个语法高亮器:一个是CSS的,一个是HTML的。 它们都很好用。

但是,我想在HTML代码中(在<style>标签内)对CSS代码着色,因此我希望能够在一个QPlainTextEdit中使用多个QSyntaxHighlighter。

有没有办法实现我的需求?我不能在同一个QPlainTextEdit上实例化两个QSyntaxHighlighter对象,因为只有第二个对象会被使用。

谢谢。

1个回答

2
您需要在单个语法高亮器中自行处理不同高亮模式之间的切换。我建议从HTML高亮器开始,因为它应该能够判断您是否在<style>标签内。使用setCurrentBlockState将该块标记为CSS,并委托给CSS渲染器。
这个基本思路在QSyntaxHighlighter文档(在注释/代码模式之间切换)和示例中有所说明。

感谢您的回答。是的,使用一个语法高亮器,这是可能的。但是,是否有一种方法可以使用单独的高亮器来实现我想要的效果?使用一个语法高亮器会有很多重复的代码(一个语法高亮器用于HTML、CSS和JS,一个用于CSS,另一个用于JS),并且有些语法高亮器会非常大。 - antoyo
不,不能在单个文档中实现。但是如果你小心谨慎,可以安排你的代码,使其不会重复太多。只需将检测语言更改的代码放在高亮器本身中即可。将实际的语言逻辑放在单独的类中,并从高亮器中使用这些辅助类。 - Mat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接