- Qt 6.9
- Qt Core
- C++ Classes
- QMetaEnum
- Qt 6.9.2 Reference Documentation

# QMetaEnum Class

The QMetaEnum class provides meta-data about an enumerator. More...

Header: | `#include <QMetaEnum>`
CMake: | `find_package(Qt6 REQUIRED COMPONENTS Core)` `target_link_libraries(mytarget PRIVATE Qt6::Core)`
qmake: | `QT += core`

- List of all members, including inherited members

## Public Functions

const char * | enumName() const
`(since 6.9)` bool | is64Bit() const
bool | isFlag() const
bool | isScoped() const
bool | isValid() const
const char * | key(int index) const
int | keyCount() const
`(since 6.9)` std::optional<quint64> | keyToValue64(const char *key) const
int | keyToValue(const char *key, bool *ok = nullptr) const
std::optional<quint64> | keysToValue64(const char *keys) const
int | keysToValue(const char *keys, bool *ok = nullptr) const
`(since 6.6)` QMetaType | metaType() const
const char * | name() const
const char * | scope() const
`(since 6.9)` std::optional<quint64> | value64(int index) const
int | value(int index) const
const char * | valueToKey(quint64 value) const
QByteArray | valueToKeys(quint64 value) const

## Static Public Members

QMetaEnum | fromType()

## Detailed Description

Use name() for the enumerator's name. The enumerator's keys (names of each enumerated item) are returned by key(); use keyCount() to find the number of keys. isFlag() returns whether the enumerator is meant to be used as a flag, meaning that its values can be combined using the OR operator.

The conversion functions keyToValue(), valueToKey(), keysToValue(), and valueToKeys() allow conversion between the integer representation of an enumeration or set value and its literal representation. The scope() function returns the class scope this enumerator was declared in.

To use QMetaEnum functionality, register the enumerator within the meta-object system using the Q_ENUM macro.

     enum AppleType {
         Big,
         Small
     };
     Q_ENUM(AppleType)

     QMetaEnum metaEnum = QMetaEnum::fromType<ModelApple::AppleType>();
     qDebug() << metaEnum.valueToKey(ModelApple::Big);

See also QMetaObject, QMetaMethod, and QMetaProperty.

## Member Function Documentation

### const char *QMetaEnum::enumName() const

Returns the enum name of the flag (without the scope).

For example, the Qt::AlignmentFlag flag has `AlignmentFlag` as the enum name, but `Alignment` as the type name. Non flag enums has the same type and enum names.

Enum names have the same scope as the type name.

See also isValid() and name().

### `[static]` template <typename T> QMetaEnum QMetaEnum::fromType()

Returns the QMetaEnum corresponding to the type in the template parameter. The enum needs to be declared with Q_ENUM.

### `[since 6.9]` bool QMetaEnum::is64Bit() const

Returns `true` if the underlying type of this enumeration is 64 bits wide.

This function was introduced in Qt 6.9.

See also value64().

### bool QMetaEnum::isFlag() const

Returns `true` if this enumerator is used as a flag; otherwise returns false.

When used as flags, enumerators can be combined using the OR operator.

See also keysToValue() and valueToKeys().

### bool QMetaEnum::isScoped() const

Returns `true` if this enumerator is declared as a C++11 enum class; otherwise returns false.

### bool QMetaEnum::isValid() const

Returns `true` if this enum is valid (has a name); otherwise returns false.

See also name().

### const char *QMetaEnum::key(int index) const

Returns the key with the given index, or `nullptr` if no such key exists.

See also keyCount(), value(), and valueToKey().

### int QMetaEnum::keyCount() const

Returns the number of keys.

See also key().

### `[since 6.9]` std::optional<quint64> QMetaEnum::keyToValue64(const char *key) const

Returns the integer value of the given enumeration key, or `std::nullopt` if key is not defined.

For flag types, use keysToValue64().

This function always sign-extends the value of 32-bit enumerations to 64 bits, if their underlying type is signed (e.g., `int`, `short`). In most cases, this is the expected behavior.

A notable exception is for flag values that have bit 31 set, like 0x8000'0000, because some compilers (such as Microsoft Visual Studio), do not automatically switch to an unsigned underlying type. To avoid this problem, explicitly specify the underlying type in the `enum` declaration.

Note: For QMetaObjects compiled prior to Qt 6.6, this function always sign-extends.

This function was introduced in Qt 6.9.

See also valueToKey(), isFlag(), and keysToValue64().

### int QMetaEnum::keyToValue(const char *key, bool *ok = nullptr) const

Returns the integer value of the given enumeration key, or -1 if key is not defined.

If key is not defined, *ok is set to false; otherwise *ok is set to true.

For flag types, use keysToValue().

If this is a 64-bit enumeration (see is64Bit()), this function returns the low 32-bit portion of the value. Use keyToValue64() to obtain the full value instead.

See also keyToValue64, valueToKey(), isFlag(), keysToValue(), and is64Bit().

### std::optional<quint64> QMetaEnum::keysToValue64(const char *keys) const

Returns the value derived from combining together the values of the keys using the OR operator, or `std::nullopt` if keys is not defined. Note that the strings in keys must be '|'-separated.

This function always sign-extends the value of 32-bit enumerations to 64 bits, if their underlying type is signed (e.g., `int`, `short`). In most cases, this is the expected behavior.

A notable exception is for flag values that have bit 31 set, like 0x8000'0000, because some compilers (such as Microsoft Visual Studio), do not automatically switch to an unsigned underlying type. To avoid this problem, explicitly specify the underlying type in the `enum` declaration.

Note: For QMetaObjects compiled prior to Qt 6.6, this function always sign-extends.

See also isFlag(), valueToKey(), and valueToKeys().

### int QMetaEnum::keysToValue(const char *keys, bool *ok = nullptr) const

Returns the value derived from combining together the values of the keys using the OR operator, or -1 if keys is not defined. Note that the strings in keys must be '|'-separated.

If keys is not defined, *ok is set to false; otherwise *ok is set to true.

If this is a 64-bit enumeration (see is64Bit()), this function returns the low 32-bit portion of the value. Use keyToValue64() to obtain the full value instead.

See also keysToValue64(), isFlag(), valueToKey(), valueToKeys(), and is64Bit().

### `[since 6.6]` QMetaType QMetaEnum::metaType() const

Returns the meta type of the enum.

If the QMetaObject that this enum is part of was generated with Qt 6.5 or earlier, this will be an invalid meta type.

Note: This is the meta type of the enum itself, not of its underlying integral type. You can retrieve the meta type of the underlying type of the enum using QMetaType::underlyingType().

This function was introduced in Qt 6.6.

### const char *QMetaEnum::name() const

Returns the name of the type (without the scope).

For example, the Qt::Key enumeration has `Key` as the type name and Qt as the scope.

For flags this returns the name of the flag type, not the name of the enum type.

See also isValid(), scope(), and enumName().

### const char *QMetaEnum::scope() const

Returns the scope this enumerator was declared in.

For example, the Qt::AlignmentFlag enumeration has `Qt` as the scope and `AlignmentFlag` as the name.

See also name().

### `[since 6.9]` std::optional<quint64> QMetaEnum::value64(int index) const

Returns the value with the given index if it exists; or returns a `std::nullopt` if it doesn't.

This function always sign-extends the value of 32-bit enumerations to 64 bits, if their underlying type is signed (e.g., `int`, `short`). In most cases, this is the expected behavior.

A notable exception is for flag values that have bit 31 set, like 0x8000'0000, because some compilers (such as Microsoft Visual Studio), do not automatically switch to an unsigned underlying type. To avoid this problem, explicitly specify the underlying type in the `enum` declaration.

Note: For QMetaObjects compiled prior to Qt 6.6, this function always sign-extends.

This function was introduced in Qt 6.9.

See also keyCount(), key(), keyToValue(), and is64Bit().

### int QMetaEnum::value(int index) const

Returns the value with the given index; or returns -1 if there is no such value.

If this is an enumeration with a 64-bit underlying type (see is64Bit()), this function returns the low 32-bit portion of the value. Use value64() to obtain the full value instead.

See also value64(), keyCount(), key(), and keyToValue().

### const char *QMetaEnum::valueToKey(quint64 value) const

Returns the string that is used as the name of the given enumeration value, or `nullptr` if value is not defined.

For flag types, use valueToKeys().

See also isFlag() and valueToKeys().

### QByteArray QMetaEnum::valueToKeys(quint64 value) const

Returns a byte array of '|'-separated keys that represents the given value.

Note: Passing a 64-bit value to an enumeration whose underlying type is 32-bit (that is, if is64Bit() returns `false`) results in an empty string being returned.

See also isFlag(), valueToKey(), and keysToValue().