取自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
正如你所看到的,结果是:报价单内部将是灰色的,包括双/。但是"之外的字符变成了深灰色,这应该是默认的字体颜色(通常是黑色)。如何调整单行注释的RegExp,使其知道绿色"//"不受darkGray突出显示规则的约束?
我试着为单行注释规则添加这个:
rule.pattern.setMinimal(true);
还是不行。我也试过:
rule.pattern = QRegExp("//[^n]*"*");
/("(?:(?!//).)+?")/
利用非捕捉组和负面表情的魔力,我设计了以下内容:
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
希望能有所帮助。