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までの範囲)外の値を持つ列挙型を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)
}

関連項目 QML 値型列挙属性列挙型

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