diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index 66591ffb2eb6b521905695b22289a49fcf94fcba..4da284876f764453c9964e68f744d3f65b258975 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -773,41 +773,56 @@ class WrapStringLiteral: public CppQuickFixOperation
 {
 public:
     WrapStringLiteral(TextEditor::BaseTextEditor *editor)
-        : CppQuickFixOperation(editor), stringLiteral(0), isObjCStringLiteral(false)
+        : CppQuickFixOperation(editor), literal(0), type(TypeNone)
     {}
 
+    enum Type { TypeString, TypeObjCString, TypeChar, TypeNone };
+
     virtual QString description() const
     {
+        if (type == TypeChar)
+            return QApplication::translate("CppTools::QuickFix", "Enclose in QLatin1Char(...)");
         return QApplication::translate("CppTools::QuickFix", "Enclose in QLatin1String(...)");
     }
 
     virtual int match(const QList<AST *> &path)
     {
-        stringLiteral = 0;
-        isObjCStringLiteral = false;
+        literal = 0;
+        type = TypeNone;
 
         if (path.isEmpty())
             return -1; // nothing to do
 
-        stringLiteral = path.last()->asStringLiteral();
+        literal = path.last()->asStringLiteral();
 
-        if (! stringLiteral)
-            return -1;
+        if (! literal) {
+            literal = path.last()->asNumericLiteral();
+            if (!literal || !tokenAt(literal->asNumericLiteral()->literal_token).is(T_CHAR_LITERAL))
+                return -1;
+            else
+                type = TypeChar;
+        } else {
+            type = TypeString;
+        }
 
-        else if (path.size() > 1) {
+        if (path.size() > 1) {
             if (CallAST *call = path.at(path.size() - 2)->asCall()) {
                 if (call->base_expression) {
                     if (SimpleNameAST *functionName = call->base_expression->asSimpleName()) {
                         const QByteArray id(tokenAt(functionName->identifier_token).identifier->chars());
 
-                        if (id == "QLatin1String" || id == "QLatin1Literal")
+                        if ((type == TypeString && (id == "QLatin1String" || id == "QLatin1Literal"))
+                                || (type == TypeChar && id == "QLatin1Char"))
                             return -1; // skip it
                     }
                 }
             }
         }
 
-        isObjCStringLiteral = charAt(startOf(stringLiteral)) == QLatin1Char('@');
+        if (type == TypeString) {
+            if (charAt(startOf(literal)) == QLatin1Char('@'))
+                type = TypeObjCString;
+        }
         return path.size() - 1; // very high priority
     }
 
@@ -815,22 +830,23 @@ public:
     {
         ChangeSet changes;
 
-        const int startPos = startOf(stringLiteral);
-        const QLatin1String replacement("QLatin1String(");
+        const int startPos = startOf(literal);
+        QLatin1String replacement = (type == TypeChar ? QLatin1String("QLatin1Char(")
+            : QLatin1String("QLatin1String("));
 
-        if (isObjCStringLiteral)
+        if (type == TypeObjCString)
             changes.replace(startPos, startPos + 1, replacement);
         else
             changes.insert(startPos, replacement);
 
-        changes.insert(endOf(stringLiteral), ")");
+        changes.insert(endOf(literal), ")");
 
         refactoringChanges()->changeFile(fileName(), changes);
     }
 
 private:
-    StringLiteralAST *stringLiteral;
-    bool isObjCStringLiteral;
+    ExpressionAST *literal;
+    Type type;
 };
 
 class CStringToNSString: public CppQuickFixOperation