diff options
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 8 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobject.h | 9 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 3e2fb46143..1af0914ad8 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2677,6 +2677,14 @@ QByteArray QMetaEnum::valueToKeys(int value) const return keys; } +/*! + \fn QMetaEnum QMetaEnum::fromType() const + \since 5.5 + + Returns the QMetaEnum corresponding to the type in the template parameter. + The enum needs to be declared with Q_ENUM. +*/ + static QByteArray qualifiedName(const QMetaEnum &e) { return QByteArray(e.scope()) + "::" + e.name(); diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h index fdbcf5171d..eaef05f03d 100644 --- a/src/corelib/kernel/qmetaobject.h +++ b/src/corelib/kernel/qmetaobject.h @@ -223,6 +223,15 @@ public: inline const QMetaObject *enclosingMetaObject() const { return mobj; } inline bool isValid() const { return name() != 0; } + + template<typename T> static QMetaEnum fromType() { + Q_STATIC_ASSERT_X(QtPrivate::IsQEnumHelper<T>::Value, + "QMetaEnum::fromType only works with enums declared as Q_ENUM or Q_FLAG"); + const QMetaObject *metaObject = qt_getEnumMetaObject(T()); + const char *name = qt_getEnumName(T()); + return metaObject->enumerator(metaObject->indexOfEnumerator(name)); + } + private: const QMetaObject *mobj; uint handle; |