diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py
index 5a43b347e2c23c84bda9beeea5fac1fe16922de7..edf67da3d4c3fb75716f6d4e18ff7a4e96359b93 100644
--- a/share/qtcreator/dumper/dumper.py
+++ b/share/qtcreator/dumper/dumper.py
@@ -1689,8 +1689,18 @@ class Dumper:
 
             nsStrippedType = self.stripNamespaceFromType(dtypeName)\
                 .replace("::", "__")
-            # The following line is only needed for D:
-            #nsStrippedType = nsStrippedType.replace(" ", "__")
+
+            # The following block is only needed for D.
+            if nsStrippedType.startswith("_A"):
+                # DMD v2.058 encodes string[] as _Array_uns long long.
+                # With spaces.
+                if nsStrippedType.startswith("_Array_"):
+                    qdump_Array(self, value)
+                    return
+                if nsStrippedType.startswith("_AArray_"):
+                    qdump_AArray(self, value)
+                    return
+
             #warn(" STRIPPED: %s" % nsStrippedType)
             #warn(" DUMPERS: %s" % (nsStrippedType in qqDumpers))
             if nsStrippedType in qqDumpers:
diff --git a/share/qtcreator/dumper/qttypes.py b/share/qtcreator/dumper/qttypes.py
index b216ce33d07a72359dd8416b034b1c4bb7b34f1d..96bdea80d48b29ad8dc48e93d938ef5aaf2cdffa 100644
--- a/share/qtcreator/dumper/qttypes.py
+++ b/share/qtcreator/dumper/qttypes.py
@@ -2379,29 +2379,42 @@ def qdump__Eigen__Matrix(d, value):
 #
 #######################################################################
 
+def cleanDType(type):
+    return stripClassTag(str(type)).replace("uns long long", "string")
 
-def qdump___Array_char(d, value):
+def qdump_Array(d, value):
     n = value["length"]
     p = value["ptr"]
+    t = cleanDType(value.type)[7:]
     d.putAddress(value.address)
-    d.putType("char[%d]" % n)
-    d.putValue(encodeCharArray(p, 100), Hex2EncodedLocal8Bit)
-    d.putNumChild(0)
+    d.putType("%s[%d]" % (t, n))
+    if t == "char":
+        d.putValue(encodeCharArray(p, 100), Hex2EncodedLocal8Bit)
+        d.putNumChild(0)
+    else:
+        d.putValue(" ")
+        d.putNumChild(n)
+        innerType = p.type
+        if d.isExpanded():
+            with Children(d, n, childType=innerType):
+                for i in range(0, n):
+                    d.putSubItem(i, p.dereference())
+                    p = p + 1
 
-# DMD v2.058 encodes string[] as _Array_uns long long. With spaces.
-def qdump___Array_uns__long__long(d, value):
-    n = value["length"]
+
+def qdump_AArray(d, value):
+    #n = value["length"]
+    # This ends up as _AArray_<key>_<value> with a single .ptr
+    # member of type void *. Not much that can be done here.
     p = value["ptr"]
+    t = cleanDType(value.type)[8:]
     d.putAddress(value.address)
-    d.putType("string[%d]" % n)
+    d.putType("%s]" % t.replace("_", "["))
     d.putValue(" ")
-    d.putNumChild(n)
-    innerType = p.type
+    d.putNumChild(1)
     if d.isExpanded():
-        with Children(d, n, childType=innerType):
-            for i in range(0, n):
-                d.putSubItem(i, p.dereference())
-                p = p + 1
+        with Children(d, 1):
+                d.putSubItem("ptr", p)
 
 
 #######################################################################