#pragma once #include #include #include namespace util { inline QMetaEnum metaEnumFor(const QMetaType& type) { const auto* meta = type.metaObject(); if (!meta) return {}; auto name = QByteArray(type.name()); if (const auto scope = name.lastIndexOf("::"); scope >= 0) name = name.mid(scope + 2); return meta->enumerator(meta->indexOfEnumerator(name.constData())); } inline bool isSupportedEnum(const QMetaType& type) { if (!type.flags().testFlag(QMetaType::IsEnumeration)) return false; const auto metaEnum = metaEnumFor(type); return metaEnum.isValid() && !metaEnum.is64Bit(); } inline const char* enumKeyFor(const QMetaEnum& metaEnum, const QVariant& value) { return metaEnum.valueToKey(static_cast(value.toLongLong())); } } // namespace util