2012-10-22 30 views
0

我正在開發一個簡單的編輯器,並在我的編輯器中嘗試實施某事。像這樣:例如,用戶鍵入「void」,然後我發出一個信號,在gui中的某個地方會捕獲它,它會自行改變。我現在用的是syntax highlighter例如在我的代碼,我發出的highlightBlock功能的信號:如何在字符串匹配時在qtextedit中發出信號?

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(); 
     ... 
    } 

但是當我運行程序時,信號始終沒有輸入無效發出。文檔說明:「只要富文本引擎有必要,即當文本塊發生更改時,就會自動調用highlightBlock()函數。」而且我認爲我只是在表達無效時發出,但顯然我錯了。任何幫助?

回答

0

您正在通過字符串文字「void」運行正則表達式,而不是通過用戶鍵入的文本。將expression.exactMatch("void")替換爲expression.exactMatch(text)。如果你還沒有,你還需要添加你的「空白」字符串作爲突出顯示規則的模式。

還要考慮在這種方法中爲'無效規則'添加一個特殊信號會導致它做很多事情。規則被定義爲具有匹配器的數據和指定的突出顯示以在匹配時應用,但是您爲其中一個匹配編寫了特殊的,不相關的行爲。這暗示着你正在做錯事,儘管沒有深入研究你正在使用的代碼,但我無法告訴你如何做得更好。

相關問題