2016-03-21 2 views
1

Я работаю над приложением Qt, чьи главного окном состоит из QPlainTextEdit подклассов окна журнала для вывода событий. У меня есть три типа сообщений:QRegExp время компиляция предупреждения

  1. Информационное сообщение, которое представляет собой QString, который начинается с [INFO] подстроки
  2. предупреждающее сообщение, которое представляет собой QString, который начинается с [WARNING] подстроки
  3. Сообщение об ошибке, которое представляет собой QString начинающееся с [ERROR] Подстрока

Теперь, чего я хочу достичь с помощью QSyntaxHighlighter класса, чтобы изменить цвет этих сообщений в зависимости от их типа (INFO типа - Qt::DarkBlue цвета, ВНИМАНИЯ типа - Qt::DarkYellow цвета, ERROR типа - Qt::DarkRed цвета) и здесь фрагмент коды, который должен был сделать задачу :

void UeLogWindowTextHighlighter::ueSetupRules() 
{ 
    UeHighlightRule* ueRuleInfo=new UeHighlightRule(this); 
    UeHighlightRule* ueRuleWarning=new UeHighlightRule(this); 
    UeHighlightRule* ueRuleError=new UeHighlightRule(this); 

    this->ueInfoStartExpression()->setPattern("^[INFO].\*");  // FIRST WARNING 
    this->ueWarningStartExpression()->setPattern("^[WARNING].\*"); // SECOND WARNING 
    this->ueErrorStartExpression()->setPattern("^[ERROR].\*");  // THIRD WARNING 

    this->ueInfoExpressionCharFormat()->setForeground(Qt::darkGray); 
    this->ueWarningExpressionCharFormat()->setForeground(Qt::darkYellow); 
    this->ueErrorExpressionCharFormat()->setForeground(Qt::darkRed); 

    ueRuleInfo->ueSetPattern(this->ueInfoStartExpression()); 
    ueRuleInfo->ueSetTextCharFormat(this->ueInfoExpressionCharFormat()); 

    this->ueHighlightRules()->append(ueRuleInfo); 

    ueRuleWarning->ueSetPattern(this->ueWarningStartExpression()); 
    ueRuleWarning->ueSetTextCharFormat(this->ueWarningExpressionCharFormat()); 

    this->ueHighlightRules()->append(ueRuleWarning); 

    ueRuleError->ueSetPattern(this->ueErrorStartExpression()); 
    ueRuleError->ueSetTextCharFormat(this->ueErrorExpressionCharFormat()); 

    this->ueHighlightRules()->append(ueRuleError); 
} // ueSetupRules 

Однако, когда я скомпилировать проект, я получаю следующее предупреждения:

../../../gui/uelogwindowtexthighlighter.cpp: In member function 'void UeLogWindowTextHighlighter::ueSetupRules()': ../../../gui/uelogwindowtexthighlighter.cpp:58:47: warning: unknown escape sequence: '\*' [enabled by default] 
    this->ueInfoStartExpression()->setPattern("^[INFO].\*"); 
              ^../../../gui/uelogwindowtexthighlighter.cpp:59:50: warning: unknown escape sequence: '\*' [enabled by default] 
    this->ueWarningStartExpression()->setPattern("^[WARNING].\*"); 
               ^../../../gui/uelogwindowtexthighlighter.cpp:60:48: warning: unknown escape sequence: '\*' [enabled by default] 
    this->ueErrorStartExpression()->setPattern("^[ERROR].\*"); 
               ^

и, следовательно, сообщения не окрашены (это мое подозрение). Что не так с моими регулярными выражениями? Я следил за this question and answer on SO.

ответ

3

Звезда (*) не обязательно должна была бежать. Удалите \ или, если вам нужно \, он должен быть экранирован и написать двойное\ (\\).