QFlags Class

template <typename Enum> class QFlags

QFlags クラスは、列挙型の値の OR 組合せを格納する型安全な方法を提供します。詳細...

ヘッダ #include <QFlags>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
を継承しています:QtPrivate::QFlagsStorageHelper

パブリックな型

パブリック関数

QFlags()
QFlags(Enum flags)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> flags)
(since 6.9) QFlags(std::in_place_t, QFlags<T>::Int flags)
QFlags(const QFlags<T> &other)
QFlags<T> &setFlag(Enum flag, bool on = true)
(since 6.2) bool testAnyFlag(Enum flag) const
(since 6.2) bool testAnyFlags(QFlags<T> flags) const
bool testFlag(Enum flag) const
(since 6.2) bool testFlags(QFlags<T> flags) const
(since 6.2) QFlags<T>::Int toInt() const
QFlags<T>::Int operator QFlags<T>::Int() const
bool operator!() const
QFlags<T> operator&(int mask) const
QFlags<T> operator&(Enum mask) const
(since 6.2) QFlags<T> operator&(QFlags<T> mask) const
QFlags<T> operator&(uint mask) const
QFlags<T> &operator&=(int mask)
QFlags<T> &operator&=(Enum mask)
(since 6.2) QFlags<T> &operator&=(QFlags<T> mask)
QFlags<T> &operator&=(uint mask)
int &operator=(const QFlags<T> &other)
QFlags<T> operator^(QFlags<T> other) const
QFlags<T> operator^(Enum other) const
QFlags<T> &operator^=(QFlags<T> other)
QFlags<T> &operator^=(Enum other)
QFlags<T> operator|(QFlags<T> other) const
QFlags<T> operator|(Enum other) const
QFlags<T> &operator|=(QFlags<T> other)
QFlags<T> &operator|=(Enum other)
QFlags<T> operator~() const

静的パブリックメンバ

(since 6.2) QFlags<T> fromInt(QFlags<T>::Int i)
(since 6.2) size_t qHash(QFlags<Enum> key, size_t seed = 0)

マクロ

詳しい説明

QFlags<Enum> クラスはテンプレート・クラスで、Enum は列挙型です。QFlags は、列挙型の値の組み合わせを格納するために Qt 全体で使用されます。

列挙値の OR 組み合わせを格納するための伝統的な C++ のアプローチは、int またはuint 変数を使用することです。この方法の不都合な点は、型チェックがまったくないことです。どのような列挙値でも、他の列挙値と OR して、int またはuint を受け取る関数に渡すことができます。

Qt 6.9 以降、QFlags は 64 ビットの列挙をサポートしています。列挙型を削除しても列挙型と QFlags 型のサイズが変わらないようにするため、32 ビットを超える場合は明示的な(固定の)基底型を使用することをお勧めします。また、コンパイラによっては、enum 型が 32 ビットより大きくなるのは、明示的な基底型がある場合のみです。

QtはQFlagsを使って型安全性を提供しています。例えば、Qt::Alignment 型は単に QFlags<Qt::AlignmentFlag> の typedef です。QLabel::setAlignment() はQt::Alignment パラメータを取ります。つまり、Qt::AlignmentFlag の値、{ } の値の組み合わせはどれでも合法です:

label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
label->setAlignment({ });

他の列挙型の値や、0以外の単なる整数を渡そうとすると、コンパイラはエラーを報告します。型付きでない方法で整数値をフラグにキャストする必要がある場合、明示的なQFlagsコンストラクタをキャスト演算子として使用できます。

独自の列挙型に QFlags を使用したい場合は、Q_DECLARE_FLAGS() およびQ_DECLARE_OPERATORS_FOR_FLAGS() を使用してください。

class MyClass
{
public:
    enum Option {
        NoOptions = 0x0,
        ShowTabs = 0x1,
        ShowAll = 0x2,
        SqueezeBlank = 0x4
    };
    Q_DECLARE_FLAGS(Options, Option)
    ...
};

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass::Options)

そして、MyClass::Options 型を使用して、MyClass::Option 値の組み合わせを格納することができます。

フラグとメタ・オブジェクト・システム

Q_DECLARE_FLAGS() マクロはフラグをメタオブジェクトシステムに公開していないので、Qt Script で使用したり、Qt Widgets Designer で編集したりすることはできません。このような目的でフラグを使用するには、Q_FLAG() マクロを使用する必要があります:

Q_FLAG(Options)

命名規則

列挙型と関連するQFlags型の賢明な命名規則は、列挙型には単数形の名前(例えば、Option )を付け、QFlags型には複数形の名前(例えば、Options )を付けることです。QFlags 型に単数形の名前を付けたい場合 (例:Alignment)、enum 型の接尾辞としてFlag を使用することができます (例:AlignmentFlag)。

メンバ型のドキュメント

[alias] QFlags::Int

暗黙の変換だけでなく、保存にも使用される整数型の型定義。列挙型の基礎となる型が符号付きか符号なしかに応じて、また Qt 6.9 以降では列挙型のサイズに応じて、qintXX またはquintXX のいずれかを指定します。通常、qint32 (int) またはquint32 (unsigned) となります。

QFlags::enum_type

Enumテンプレート型のための型定義です。

メンバ関数のドキュメント

[constexpr noexcept] QFlags::QFlags()

フラグが設定されていない QFlags オブジェクトを構築します。

[constexpr noexcept] QFlags::QFlags(Enum flags)

flags を格納する QFlags オブジェクトを構築します。

[constexpr noexcept] QFlags::QFlags(QFlag flag)

整数flag で初期化された QFlags オブジェクトを構築します。

QFlag 型はヘルパー型です。int int の代わりにこれを使用することで、任意の列挙値を QFlags にキャストできないようにします。

このコンストラクタは32ビットEnum 型にのみ存在します。すべての列挙型のサイズをサポートするには、std::in_place_t を使用したコンストラクタを考えてください。

[constexpr noexcept] QFlags::QFlags(std::initializer_list<Enum> flags)

ビット OR 演算子を使用してすべてのflags を組み合わせて初期化された QFlags オブジェクトを構築します。

operator|=() およびoperator|()も参照

[constexpr noexcept, since 6.9] QFlags::QFlags(std::in_place_t, QFlags<T>::Int flags)

整数flags で初期化された QFlags オブジェクトを構築します。

この関数は Qt 6.9 で導入されました。

[default] QFlags::QFlags(const QFlags<T> &other)

other のコピーを作成する。

[static constexpr noexcept, since 6.2] QFlags<T> QFlags::fromInt(QFlags<T>::Int i)

整数値i を表すQFlags オブジェクトを構築します。

この関数は Qt 6.2 で導入されました。

[constexpr noexcept] QFlags<T> &QFlags::setFlag(Enum flag, bool on = true)

ontrue の場合はフラグflag をセットし、onfalse の場合はフラグを解除する。このオブジェクトへの参照を返す。

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlag(Enum flag) const

flag で設定されたフラグがこの flags オブジェクトでも設定されている場合はtrue を返し、そうでない場合はfalse を返す。flag にフラグが設定されていない場合は、常にfalse を返します。

この関数は Qt 6.2 で導入されました。

testFlag()も参照してください

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlags(QFlags<T> flags) const

flags で設定されたフラグがこの flags オブジェクトでも設定されている場合はtrue を返し、そうでない場合はfalse を返す。flags にフラグが設定されていない場合は、常にfalse を返します。

この関数は Qt 6.2 で導入されました。

testFlags()も参照してください

[constexpr noexcept] bool QFlags::testFlag(Enum flag) const

フラグflag がセットされていればtrue を返し、そうでなければfalse を返す。

注意: flag に 1 に設定された複数のビットが含まれている場合(例えば、他の列挙子のビット単位の OR に等しい列挙子である場合)、この関数は、このフラグ・オブジェクトにすべてのビットが設定されている場合に限り、true を返します。一方、flag に 1 にセットされたビットがない(つまり、整数としての値が 0 である)場合、この関数は、この flags オブジェクトにも 1 にセットされたビットがない場合に限り、true を返します。

testAnyFlag()も参照のこと

[constexpr noexcept, since 6.2] bool QFlags::testFlags(QFlags<T> flags) const

このflagsオブジェクトが与えられたflags にマッチする場合、true を返す。

flags に何らかのフラグが設定されている場合、flags で設定されているすべてのフラグがこの flags オブジェクトでも設定されていれば、この flags オブジェクトは正確にマッチする。そうでない場合、flags にフラグが設定されていないとき、この flags オブジェクトもフラグが設定されていない場合にのみマッチします。

この関数は Qt 6.2 で導入されました。

testAnyFlags()も参照してください

[constexpr noexcept, since 6.2] QFlags<T>::Int QFlags::toInt() const

QFlags オブジェクトに格納されている値を整数で返します。返される整数は、列挙型の基となる型が符号付きか符号なしかに応じて、符号付きか符号なしかのどちらかになることに注意してください。

この関数は Qt 6.2 で導入されました。

Intも参照してください

[constexpr noexcept] QFlags<T>::Int QFlags::operator QFlags<T>::Int() const

QFlags オブジェクトに格納されている値を整数で返します。

Intも参照

[constexpr noexcept] bool QFlags::operator!() const

フラグが設定されていない場合(すなわち、QFlags オブジェクトが格納している値が0の場合)、true を返し、そうでない場合はfalse を返す。

[constexpr noexcept] QFlags<T> QFlags::operator&(int mask) const

このオブジェクトとmask に対するビットごとの AND 演算の結果を含むQFlags オブジェクトを返す。

QT_TYPESAFE_FLAGS マクロが定義されている場合、この演算子は無効となる。64ビットのQFlags についても64ビットに拡張されていないことに注意。64ビットをサポートするには、タイプセーフのオーバーロードを使用する。

operator&=()、operator|()、operator^()、operator~()も参照のこと

[constexpr noexcept] QFlags<T> QFlags::operator&(Enum mask) const

これはオーバーロードされた関数である。

[constexpr noexcept, since 6.2] QFlags<T> QFlags::operator&(QFlags<T> mask) const

これはオーバーロードされた関数です。

この関数は Qt 6.2 で導入されました。

[constexpr noexcept] QFlags<T> QFlags::operator&(uint mask) const

これはオーバーロードされた関数である。

QT_TYPESAFE_FLAGS マクロが定義されている場合、この演算子は無効になる。64ビットQFlags 、64ビットには拡張されないことに注意。64ビット対応には、タイプセーフのオーバーロードを使用する。

[constexpr noexcept] QFlags<T> &QFlags::operator&=(int mask)

mask でビットごとの AND 演算を行い、結果をこのQFlags オブジェクトに格納します。このオブジェクトへの参照を返す。

QT_TYPESAFE_FLAGS マクロが定義されている場合、この演算子は無効になる。64ビットのQFlags でも64ビットに拡張されていないことに注意。64ビットをサポートするには、タイプセーフのオーバーロードを使用する。

operator&()、operator|=()、operator^=()も参照のこと

[constexpr noexcept] QFlags<T> &QFlags::operator&=(Enum mask)

これはオーバーロードされた関数である。

[constexpr noexcept, since 6.2] QFlags<T> &QFlags::operator&=(QFlags<T> mask)

これはオーバーロードされた関数です。

この関数は Qt 6.2 で導入されました。

[constexpr noexcept] QFlags<T> &QFlags::operator&=(uint mask)

これはオーバーロードされた関数である。

QT_TYPESAFE_FLAGS マクロが定義されている場合、この演算子は無効になる。64ビットQFlags 、64ビットには拡張されないことに注意。64ビット対応には、タイプセーフのオーバーロードを使用する。

[default] int &QFlags::operator=(const QFlags<T> &other)

このオブジェクトにother を割り当て、このオブジェクトへの参照を返す。

[constexpr noexcept] QFlags<T> QFlags::operator^(QFlags<T> other) const

このオブジェクトとother に対するビットごとの XOR 演算の結果を含むQFlags オブジェクトを返す。

operator^=()、operator&()、operator|()、operator~()も参照

[constexpr noexcept] QFlags<T> QFlags::operator^(Enum other) const

これはオーバーロードされた関数である。

[constexpr noexcept] QFlags<T> &QFlags::operator^=(QFlags<T> other)

other でビットごとの XOR 演算を行い、結果をこのQFlags オブジェクトに格納します。このオブジェクトへの参照を返します。

operator^()、operator&=()、operator|=()も参照

[constexpr noexcept] QFlags<T> &QFlags::operator^=(Enum other)

これはオーバーロードされた関数である。

[constexpr noexcept] QFlags<T> QFlags::operator|(QFlags<T> other) const

このオブジェクトとother に対するビット OR 演算の結果を含むQFlags オブジェクトを返す。

operator|=()、operator^()、operator&()、operator~()も参照

[constexpr noexcept] QFlags<T> QFlags::operator|(Enum other) const

これはオーバーロードされた関数である。

[constexpr noexcept] QFlags<T> &QFlags::operator|=(QFlags<T> other)

other でビット OR 演算を行い、結果をこのQFlags オブジェクトに格納する。このオブジェクトへの参照を返します。

operator|()、operator&=()、operator^=()も参照

[constexpr noexcept] QFlags<T> &QFlags::operator|=(Enum other)

これはオーバーロードされた関数である。

[constexpr noexcept] QFlags<T> QFlags::operator~() const

このオブジェクトのビット単位の否定を含むQFlags オブジェクトを返す。

operator&()、operator|()、operator^()も参照

関連する非会員

[constexpr noexcept, since 6.2] template <typename Enum> size_t qHash(QFlags<Enum> key, size_t seed = 0)

key のハッシュ値を返します。計算のシードとしてseed を使用します。

この関数は Qt 6.2 で導入されました。

マクロのドキュメント

Q_DECLARE_FLAGS(Flags, Enum)

Q_DECLARE_FLAGS()マクロは次のように展開される。

typedef QFlags<Enum> Flags;

Enum は既存の列挙型の名前であるのに対し、 はFlags QFlags<Enum> typedef の名前である。

詳細はQFlags のドキュメントを参照のこと。

Q_DECLARE_OPERATORS_FOR_FLAGS()も参照のこと

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Q_DECLARE_OPERATORS_FOR_FLAGS()マクロは、FlagsQFlags<T>型のグローバルoperator|() 関数を宣言する。

詳細はQFlags のドキュメントを参照してください。

Q_DECLARE_FLAGS()も参照してください

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