diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 12 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject.h | 1 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject_p.h | 5 | ||||
-rw-r--r-- | src/tools/moc/generator.cpp | 7 |
4 files changed, 23 insertions, 2 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 633fcfda91..2e0dd8e5d2 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2557,9 +2557,19 @@ int QMetaEnum::value(int index) const */ bool QMetaEnum::isFlag() const { - return mobj && mobj->d.data[handle + 1]; + return mobj && mobj->d.data[handle + 1] & EnumIsFlag; } +/*! + \since 5.8 + + Returns \c true if this enumerator is declared as a C++11 enum class; + otherwise returns false. +*/ +bool QMetaEnum::isScoped() const +{ + return mobj && mobj->d.data[handle + 1] & EnumIsScoped; +} /*! Returns the scope this enumerator was declared in. diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h index c2451630b1..40b2aa6402 100644 --- a/src/corelib/kernel/qmetaobject.h +++ b/src/corelib/kernel/qmetaobject.h @@ -210,6 +210,7 @@ public: const char *name() const; bool isFlag() const; + bool isScoped() const; int keyCount() const; const char *key(int index) const; diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h index 9b67d63524..1c540f64c7 100644 --- a/src/corelib/kernel/qmetaobject_p.h +++ b/src/corelib/kernel/qmetaobject_p.h @@ -114,6 +114,11 @@ enum MetaDataFlags { TypeNameIndexMask = 0x7FFFFFFF }; +enum EnumFlags { + EnumIsFlag = 0x1, + EnumIsScoped = 0x2 +}; + extern int qMetaTypeTypeInternal(const char *); class QArgumentType diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 7de6fe632f..ccc6d795d7 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -878,9 +878,14 @@ void Generator::generateEnums(int index) int i; for (i = 0; i < cdef->enumList.count(); ++i) { const EnumDef &e = cdef->enumList.at(i); + int flags = 0; + if (cdef->enumDeclarations.value(e.name)) + flags |= EnumIsFlag; + if (e.isEnumClass) + flags |= EnumIsScoped; fprintf(out, " %4d, 0x%.1x, %4d, %4d,\n", stridx(e.name), - cdef->enumDeclarations.value(e.name) ? 1 : 0, + flags, e.values.count(), index); index += e.values.count() * 2; |