本页内容

QMetaEnum Class

QMetaEnum 类提供了关于枚举器的元数据。更多内容...

头文件: #include <QMetaEnum>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共函数

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

静态公共成员

QMetaEnum fromType()

详细说明

使用name()获取枚举器的名称。枚举器的键(每个枚举项的名称)由key()返回;使用keyCount()获取键的数量。isFlag()返回该枚举器是否设计为标志,这意味着其值可以使用OR运算符进行组合。

转换函数keyToValue()、valueToKey()、keysToValue() 和valueToKeys() 允许在枚举或集合值的整数表示形式与其字面量表示形式之间进行转换。scope() 函数返回声明该枚举器的类作用域。

要使用 QMetaEnum 功能,请使用Q_ENUM 宏在元对象系统中注册该枚举器。

enumAppleType {
    Big,
    Small
};
Q_ENUM(AppleType)

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

另请参阅 QMetaObject 、QMetaMethod 以及QMetaProperty 。

成员函数文档

const char *QMetaEnum::enumName() const

返回该标志的枚举名称(不包含作用域)。

例如,Qt::AlignmentFlag 标志的枚举名称为AlignmentFlag ,但类型名称为Alignment 。非标志枚举的类型名称与枚举名称相同。

枚举名称的作用域与类型名称相同。

另请参阅 isValid() 和name()。

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

返回与模板参数中类型对应的QMetaEnum 。该枚举必须使用Q_ENUM 进行声明。

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

如果该枚举的底层类型为 64 位,则返回true 。

该函数在 Qt 6.9 中引入。

另请参阅 value64()。

bool QMetaEnum::isFlag() const

如果将此枚举器用作标志,则返回true ;否则返回false。

当用作标志时,枚举器可以使用 OR 运算符进行组合。

另请参阅 keysToValue() 和valueToKeys()。

bool QMetaEnum::isScoped() const

如果该枚举器被声明为 C++11 枚举类,则返回 `true `;否则返回 `false`。

bool QMetaEnum::isValid() const

如果该枚举有效(具有名称),则返回true ;否则返回false。

另请参阅 name()。

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

返回具有给定index 的键;如果不存在该键,则返回nullptr 。

另请参阅 keyCount()、value() 和valueToKey()。

int QMetaEnum::keyCount() const

返回键的数量。

另请参阅 ` key()`。

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

返回给定枚举key 的整数值;如果key 未定义,则返回std::nullopt 。

对于标志类型,请使用keysToValue64()。

如果 32 位枚举的底层类型是有符号的(例如int 、short ),则此函数会始终将该枚举的值进行符号扩展至 64 位。在大多数情况下,这是预期的行为。

一个值得注意的例外是第 31 位被设置的标志值(如 0x8000'0000),因为某些编译器(如 Microsoft Visual Studio)不会自动切换为无符号底层类型。为避免此问题,请在enum 的声明中显式指定底层类型。

注意:对于在 Qt 6.6 之前编译的 QMetaObject,此函数始终会进行符号扩展。

该函数在 Qt 6.9 中引入。

另请参阅 valueToKey()、isFlag() 和keysToValue64()。

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

返回给定枚举key 的整数值;如果key 未定义,则返回-1。

如果key 未定义,则 *ok 被设置为 false;否则 *ok 被设置为 true。

对于标志类型,请使用keysToValue()。

如果这是一个 64 位枚举(参见is64Bit()),此函数将返回该值的低 32 位部分。若要获取完整值,请使用keyToValue64()。

另请参阅 keyToValue64 、valueToKey()、isFlag()、keysToValue() 以及is64Bit()。

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

返回通过 OR 运算符将keys 中的值组合而得的值;若keys 未定义,则返回std::nullopt 。请注意,keys 中的字符串必须以 '|' 分隔。

如果 32 位枚举的底层类型是有符号的(例如int 、short ),则该函数会始终将枚举值进行符号扩展至 64 位。在大多数情况下,这是预期的行为。

一个值得注意的例外是第 31 位被设置的标志值,例如 0x8000'0000,因为某些编译器(如 Microsoft Visual Studio)不会自动切换为无符号底层类型。为避免此问题,请在enum 的声明中显式指定底层类型。

注意:对于在 Qt 6.6 之前编译的 QMetaObject,此函数始终会进行符号扩展。

另请参阅 isFlag()、valueToKey() 和valueToKeys()。

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

返回通过“或”(OR)运算符将keys 中的值组合而得的值;若keys 未定义,则返回-1。请注意,keys 中的字符串必须以“|”分隔。

如果未定义keys ,则 *ok 被设为 false;否则 *ok 被设为 true。

如果这是一个 64 位枚举(参见is64Bit()),则该函数返回值的低 32 位部分。若要获取完整值,请使用keyToValue64()。

另请参阅 keysToValue64()、isFlag()、valueToKey()、valueToKeys() 以及is64Bit()。

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

返回该枚举的元类型。

如果该枚举所属的QMetaObject 是使用 Qt 6.5 或更早版本生成的,则此元类型将无效。

注意:这是 枚举本身的元类型,而非其底层整数类型的元类型。您可以使用 `QMetaType::underlyingType()` 获取枚举底层类型的元类型。

该函数于 Qt 6.6 中引入。

const char *QMetaEnum::name() const

返回类型的名称(不包含作用域)。

例如,Qt::Key 枚举的类型名为Key ,作用域为Qt 。

对于标志,此函数返回的是标志类型的名称,而不是枚举类型的名称。

另请参阅 isValid()、scope() 和enumName()。

const char *QMetaEnum::scope() const

返回该枚举器被声明的作用域。

例如,Qt::AlignmentFlag 枚举的范围为Qt ,名称为AlignmentFlag 。

另请参阅 name()。

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

如果存在,则返回具有给定index 的值;如果不存在,则返回std::nullopt 。

如果 32 位枚举的底层类型是有符号的(例如int 、short ),则该函数会始终将该枚举的值进行符号扩展至 64 位。在大多数情况下,这是预期的行为。

一个值得注意的例外是第 31 位被设为 1 的标志值(如 0x8000'0000),因为某些编译器(如 Microsoft Visual Studio)不会自动切换为无符号底层类型。为避免此问题,请在enum 的声明中显式指定底层类型。

注意:对于在 Qt 6.6 之前编译的 QMetaObject,此函数始终会进行符号扩展。

该函数于 Qt 6.9 中引入。

另请参阅 keyCount()、key()、keyToValue() 和is64Bit()。

int QMetaEnum::value(int index) const

返回具有给定index 的值;如果不存在此值,则返回-1。

如果这是一个底层类型为 64 位的枚举(参见is64Bit()),则该函数返回该值的低 32 位部分。若要获取完整值,请使用value64()。

另请参阅 value64()、keyCount()、key() 和keyToValue()。

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

返回用作给定枚举名称的字符串value ;如果未定义value ,则返回nullptr 。

对于标志类型,请使用valueToKeys()。

另请参阅 isFlag() 和valueToKeys()。

QByteArray QMetaEnum::valueToKeys(quint64 value) const

返回一个由“|”分隔的键组成的字节数组,该数组表示给定的value 。

注意:将 一个 64 位 `value `传递给 底层类型为 32 位的枚举(即当 `is64Bit()` 返回 `false` 时),将导致返回一个空字符串。

另请参阅 isFlag()、valueToKey() 和keysToValue()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.