diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py
index c4151d93ed966f2c85745081ac1fb8f58169b23d..11a7ced04739840f989c7435ce6c4dcb94b92754 100644
--- a/share/qtcreator/gdbmacros/dumper.py
+++ b/share/qtcreator/gdbmacros/dumper.py
@@ -1141,6 +1141,8 @@ SalCommand()
 #######################################################################
 
 
+qqQObjectCache = {}
+
 class Dumper:
     def __init__(self):
         self.output = ""
@@ -1154,6 +1156,25 @@ class Dumper:
         self.currentType = None
         self.currentTypePriority = -100
 
+    def checkForQObjectBase(self, type):
+        if type.code != gdb.TYPE_CODE_STRUCT:
+            return False
+        name = str(type)
+        if name in qqQObjectCache:
+            return qqQObjectCache[name]
+        if name == self.ns + "QObject":
+            qqQObjectCache[name] = True
+            return True
+        fields = type.strip_typedefs().fields()
+        if len(fields) == 0:
+            qqQObjectCache[name] = False
+            return False
+        base = fields[0].type.strip_typedefs()
+        result = self.checkForQObjectBase(base)
+        qqQObjectCache[name] = result
+        return result
+
+
     def put(self, value):
         self.output += value
 
@@ -1338,11 +1359,7 @@ class Dumper:
             return
 
         # Is this derived from QObject?
-        hasMetaObject = False
-        for field in typedefStrippedType.strip_typedefs().fields():
-            if field.name == "staticMetaObject":
-                hasMetaObject = True
-                break
+        isQObjectDerived = self.checkForQObjectBase(typedefStrippedType)
 
         nsStrippedType = self.stripNamespaceFromType(typedefStrippedType)\
             .replace("::", "__")
@@ -1354,10 +1371,10 @@ class Dumper:
 
         if self.useFancy \
                 and ((format is None) or (format >= 1)) \
-                and ((nsStrippedType in self.dumpers) or hasMetaObject):
+                and ((nsStrippedType in self.dumpers) or isQObjectDerived):
             #warn("IS DUMPABLE: %s " % type)
             self.putType(item.value.type)
-            if hasMetaObject:
+            if isQObjectDerived:
                 # value has references stripped off item.value.
                 item1 = Item(value, item.iname)
                 qdump__QObject(self, item1)