diff --git a/src/plugins/help/searchwidget.cpp b/src/plugins/help/searchwidget.cpp index 07b11cf2aac..236f25e6390 100644 --- a/src/plugins/help/searchwidget.cpp +++ b/src/plugins/help/searchwidget.cpp @@ -153,8 +153,33 @@ void SearchWidget::showEvent(QShowEvent *event) void SearchWidget::search() const { - QList query = searchEngine->queryWidget()->query(); - searchEngine->search(query); + static QStringList charsToEscapeList; + if (charsToEscapeList.isEmpty()) { + charsToEscapeList << QLatin1String("\\") << QLatin1String("+") + << QLatin1String("-") << QLatin1String("!") << QLatin1String("(") + << QLatin1String(")") << QLatin1String(":") << QLatin1String("^") + << QLatin1String("[") << QLatin1String("]") << QLatin1String("{") + << QLatin1String("}") << QLatin1String("~"); + } + + static QString escapeChar(QLatin1String("\\")); + static QRegExp regExp(QLatin1String("[\\+\\-\\!\\(\\)\\^\\[\\]\\{\\}~:]")); + + QList escapedQueries; + const QList queries = searchEngine->queryWidget()->query(); + foreach (const QHelpSearchQuery &query, queries) { + QHelpSearchQuery escapedQuery; + escapedQuery.fieldName = query.fieldName; + foreach (QString word, query.wordList) { + if (word.contains(regExp)) { + foreach (const QString &charToEscape, charsToEscapeList) + word.replace(charToEscape, escapeChar + charToEscape); + escapedQuery.wordList.append(word); + } + } + escapedQueries.append(escapedQuery); + } + searchEngine->search(escapedQueries); } void SearchWidget::searchingStarted()