このページでは

QMLの列挙型

QMLで使用される列挙型は、QMLまたはC++のいずれかで定義できます。

QML での列挙型の定義に関する詳細については、「列挙型属性」を参照してください。

C++ で定義する場合、QML に公開される列挙型は、Q_ENUM またはQ_ENUM_NS マクロでマークされ、QML_NAMED_ELEMENT またはQML_ELEMENT マクロを介して QML に公開される型の一部でなければなりません。詳細については、「列挙型」を参照してください。

QMLで使用可能な列挙型を保持できるのは、名前付きQML型のみです。各列挙型は、それを囲む名前付き型を持たなければなりません。QMLネームスペースもQML型の一種であり、列挙型を保持することができます。

その結果、列挙値は<Type>.<Value> のように参照できます。たとえば、Text 型にはAlignRight という列挙値があります:

Text { horizontalAlignment: Text.AlignRight }

列挙値は、型名によって生成される型参照のプロパティです。JavaScriptの角括弧構文を使用して取得することも可能ですが、これはエラーが発生しやすいため推奨されません:

// Avoid this if possible
Text { horizontalAlignment: Text["AlignRight"] }

QML での列挙型の使用

QML において、列挙型は独立した型ではなく、それを囲む型のプロパティとして扱われます。列挙値は、その列挙型の基底型として表現されます。 ほとんどの列挙型については、JavaScriptのNumber型またはQMLのdouble型を使用して格納しても安全です。ただし、64ビット整数については、その範囲が64ビットdoubleの安全な整数範囲(-(2^53 - 1)から2^53 - 1まで、両端を含む)を超えるため、常に機能するとは限りません。 したがって、安全な整数範囲(-(2^53 - 1) から 2^53 - 1 まで、両端を含む)外の値を持つ列挙型は、QML で安全に使用することはできません。 値が 32 ビット符号付き整数の数値範囲内に収まる列挙型については、QML の `int`型を格納型として安全に使用できます。

例:

import QtQuick

Item {
    // refer to Text.AlignRight using an int type
    property int enumValue: textItem.horizontalAlignment

    signal valueEmitted(int someValue)

    Text {
        id: textItem
        horizontalAlignment: Text.AlignRight
    }

    // emit valueEmitted() signal, which expects an int, with Text.AlignRight
    Component.onCompleted: valueEmitted(Text.AlignRight)
}

列挙型のキー文字列 <-> キー値のヘルパー

Qtグローバルオブジェクトは、列挙型のキー名をその数値に、あるいはその逆にマッピングできるヘルパーメソッドを提供しています。

  • Qt.enumStringToValue: キー名を含む文字列をその数値にマッピングします
  • Qt.enumValueToString: 値を、その値に対応するキー名に変換します
  • Qt.enumValueToStrings: 値を、その値を持つキー名のリストに変換します

例:

// Main.qml
import QtQml

Item {
    enum E { Black = 0, White = 1, Grey = 2, Gray = 2 }

    // 1 (White)
    property int i: Qt.enumStringToValue(Main.E, "White")

    // "Black"
    property string s: Qt.enumValueToString(Main.E, Main.E.Black)

    // ["Grey", "Gray"]
    property list<string> ss: Qt.enumValueToStrings(Main.E, Main.E.Grey)
}

関連項目: QML 値型、列挙型属性、列挙型、QtQml::Qt::enumStringToValue 、QtQml::Qt::enumValueToString 、およびQtQml::Qt::enumValueToStrings 。

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