summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qmetaobject.cpp8
-rw-r--r--src/corelib/kernel/qmetaobject.h9
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;