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() 函数返回该枚举器所声明的类作用域。

另请参见 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 之前编译的 QMetaObjects,该函数总是符号扩展。

该函数在 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 之前编译的 QMetaObjects,该函数总是符号扩展。

另请参阅 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 位的标志值,如 0x8000'0000,因为某些编译器(如 Microsoft Visual Studio)不会自动切换到无符号的底层类型。为避免这个问题,请在enum 声明中明确指定底层类型。

注意: 对于 Qt 6.6 之前编译的 QMetaObjects,该函数总是符号扩展。

该函数在 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

注: 如果向底层类型为 32 位的枚举传递 64 位value (即is64Bit() 返回false ),则返回空字符串。

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

© 2025 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.