Qt语法突出显示器突出显示单行注释的规则

时间:2015-03-27 16:35:04

标签: c++ regex qt syntax-highlighting qt5.3

取自Qt语法荧光笔示例:

//single line comment rule
singleLineCommentFormat.setForeground(Qt::darkGray);
rule.pattern = QRegExp("//[^\n]*");
rule.format = singleLineCommentFormat;
highlightingRules.append(rule);
//string rule
quotationFormat.setForeground(Qt::darkGreen);
rule.pattern = QRegExp("\".*\"");
rule.pattern.setMinimal(true);
rule.format = quotationFormat;
highlightingRules.append(rule);

问题在于你有这样的事情:

"inside is darkGreen//"outside is darkGray

正如您所看到的,结果是:引号内部将是灰色的,包括double /。但是外面的人物""变成darkGray,它应该是默认的字体颜色(通常为黑色)。如何调整RegExp的单行评论,以便它知道绿色" //"是否免除了darkGray突出显示规则?

我尝试将这个添加到单行评论规则中:

rule.pattern.setMinimal(true);

仍然没有工作。我也试过了:

rule.pattern = QRegExp("//[^\n]*\"*");

1 个答案:

答案 0 :(得分:0)

/(\"(?:(?!\/\/).)+?\")/

使用非捕获组的魔力和负面展望,我设计了以下内容:

quotationFormat.setForeground(Qt::darkGreen);
rule.pattern = QRegExp("\"(?:(?!\\/\\/).)+\"");//QRegExp("\".*\"");

rule.pattern.setMinimal(true);
rule.format = quotationFormat;
highlightingRules.append(rule);

魔术应用,你得到了你正在寻找的行为。

参考文献:

https://stackoverflow.com/a/977294/999943

http://regexr.com/3an21

并在此示例中进行了测试:

http://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html

希望有所帮助。