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 マクロを使用して、メタオブジェクトシステム内に列挙子を登録します。
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 の enum クラスとして宣言されている場合は `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() を使用してください。
この関数は、基になる型が符号付き(例:int 、short )の場合、32 ビットの列挙型の値を常に 64 ビットに符号拡張します。ほとんどの場合、これは期待される動作です。
ただし、0x8000'0000のようにビット31がセットされているフラグ値については、一部のコンパイラ(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
keys の値をOR演算子を用いて結合して得られた値を返します。keys が定義されていない場合は、std::nullopt を返します。なお、keys 内の文字列は「|」で区切られている必要があります。
この関数は、基となる型が符号付きである場合(例:int 、short )、32ビット列挙型の値を常に64ビットに符号拡張します。ほとんどの場合、これは期待される動作です。
ただし、0x8000'0000のようにビット31がセットされているフラグ値については、一部のコンパイラ(Microsoft Visual Studioなど)が自動的に符号なしの基底型に切り替えないため、顕著な例外となります。この問題を回避するには、enum の宣言で基底型を明示的に指定してください。
注: Qt 6.6より前にコンパイルされたQMetaObjectの場合 、この関数は常に符号拡張を行います。
関連項目: isFlag()、valueToKey()、valueToKeys()。
int QMetaEnum::keysToValue(const char *keys, bool *ok = nullptr) const
keys の値をOR演算子を用いて組み合わせた結果を返します。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 を返します。
この関数は、基となる型が符号付きである場合(例:int 、short )、32ビット列挙型の値を常に64ビットに符号拡張します。ほとんどの場合、これは期待される動作です。
ただし、0x8000'0000のようにビット31がセットされているフラグ値については、一部のコンパイラ(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.