0

我正在开发一个简单的编辑器,并且在我的编辑器中我正在尝试实现某事。像这样:例如,用户键入“void”然后我发出一个信号,gui 中的某个地方会捕捉到它,它会自行改变。我在代码中使用了语法高亮示例,并在 highlightBlock 函数中发出了一个信号:

void Highlighter::highlightBlock(const QString &text)
 {
     foreach (const HighlightingRule &rule, highlightingRules) {
         QRegExp expression(rule.pattern);
         if (expression.exactMatch("void")==true) {
             emit voidPrinted(2);

         }
         int index = expression.indexIn(text);
         while (index >= 0) {
             int length = expression.matchedLength();
         ...
     }

但是当我运行程序时,信号总是在不输入 void 的情况下发出。文档说“只要富文本引擎需要,即当文本块发生更改时,就会自动调用 highlightBlock() 函数。” 而且我认为我只在表达式无效时才发出,但显然,我错了。有什么帮助吗?

4

1 回答 1

0

您在字符串文字“void”上运行正则表达式,而不是在用户输入的文本上运行。替换expression.exactMatch("void")expression.exactMatch(text). 如果您还没有,您还需要添加“void”字符串作为 highlightingRules 的模式。

还要考虑为这个方法添加一个“无效规则”的特殊信号会导致它做很多事情。规则被定义为具有匹配器和指定突出显示以在匹配时应用的数据,但您正在为其中一个匹配项硬编码一种特殊的、不相关的行为。这对我来说表明你做错了,尽管没有进一步研究你正在使用的代码,我无法告诉你如何做得更好。

于 2012-10-23T00:10:09.597 回答