diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 204a1479ae5fe58e4af75f0f91d2302ef82cd51c..fa55c4d7bc89b81c79a1b87dacc8abc4a1ddc020 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -334,8 +334,8 @@ static bool isSimpleType(const char *type)
         case 'l':
             return isEqual(type, "long") || startsWith(type, "long ");
         case 's':
-            return isEqual(type, "short") || isEqual(type, "signed")
-                || startsWith(type, "signed ");
+            return isEqual(type, "short") || startsWith(type, "short ")
+                || isEqual(type, "signed") || startsWith(type, "signed ");
         case 'u':
             return isEqual(type, "unsigned") || startsWith(type, "unsigned ");
     }
@@ -369,7 +369,8 @@ static bool isMovableType(const char *type)
                 || isEqual(type, "QBitArray")
                 || isEqual(type, "QByteArray") ;
         case 'C':
-            return isEqual(type, "QCustomTypeInfo");
+            return isEqual(type, "QCustomTypeInfo")
+                || isEqual(type, "QChar");
         case 'D':
             return isEqual(type, "QDate")
                 || isEqual(type, "QDateTime");
@@ -386,6 +387,7 @@ static bool isMovableType(const char *type)
         case 'L':
             return isEqual(type, "QLine")
                 || isEqual(type, "QLineF")
+                || isEqual(type, "QLatin1Char")
                 || isEqual(type, "QLocal");
         case 'M':
             return isEqual(type, "QMatrix")
@@ -786,6 +788,17 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr
                 P(d, field, *(QByteArray*)addr);
             }
             return;
+        case 'C':
+            if (isEqual(type, "QChar")) {
+                d.addCommaIfNeeded();
+                QChar c = *(QChar *)addr;
+                char str[] = "'?', usc=\0";
+                if (c.isPrint() && c.unicode() < 127)
+                    str[1] = char(c.unicode());
+                P(d, field, str << c.unicode());
+                P(d, "numchild", 0);
+            }
+            return;
         case 'L':
             if (startsWith(type, "QList<")) {
                 const QListData *ldata = reinterpret_cast<const QListData*>(addr);
@@ -990,6 +1003,18 @@ static void qDumpQByteArray(QDumper &d)
     d.disarm();
 }
 
+static void qDumpQChar(QDumper &d)
+{
+    d.addCommaIfNeeded();
+    QChar c = *(QChar *)d.data;
+    char str[] = "'?', usc=\0";
+    if (c.isPrint() && c.unicode() < 127)
+        str[1] = char(c.unicode());
+    P(d, "value", str << c.unicode());
+    P(d, "numchild", 0);
+    d.disarm();
+}
+
 static void qDumpQDateTime(QDumper &d)
 {
 #ifdef QT_NO_DATESTRING
@@ -2664,6 +2689,10 @@ static void handleProtocolVersion2and3(QDumper & d)
             if (isEqual(type, "QByteArray"))
                 qDumpQByteArray(d);
             break;
+        case 'C':
+            if (isEqual(type, "QChar"))
+                qDumpQChar(d);
+            break;
         case 'D':
             if (isEqual(type, "QDateTime"))
                 qDumpQDateTime(d);