summaryrefslogtreecommitdiffstats
path: root/src/tools/moc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/moc')
-rw-r--r--src/tools/moc/generator.cpp2
-rw-r--r--src/tools/moc/moc.cpp6
2 files changed, 7 insertions, 1 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index 2c41b17b68..f27c155da5 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -530,7 +530,7 @@ void Generator::generateCode()
if (isQObject)
fprintf(out, " { Q_NULLPTR, ");
- else if (cdef->superclassList.size())
+ else if (cdef->superclassList.size() && (!cdef->hasQGadget || knownGadgets.contains(purestSuperClass)))
fprintf(out, " { &%s::staticMetaObject, ", purestSuperClass.constData());
else
fprintf(out, " { Q_NULLPTR, ");
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 5506dc75c5..75349191d4 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -139,6 +139,12 @@ bool Moc::parseClassHead(ClassDef *def)
def->superclassList += qMakePair(type, access);
}
} while (test(COMMA));
+
+ if (knownGadgets.contains(def->superclassList.first().first)) {
+ // Q_GADGET subclasses are treated as Q_GADGETs
+ knownGadgets.insert(def->classname, def->qualified);
+ knownGadgets.insert(def->qualified, def->qualified);
+ }
}
if (!test(LBRACE))
return false;