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

パブリックな型

パブリック関数

QFlags()
QFlags(Enum flags)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> 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は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)

命名規則

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

QFlagも参照してください

メンバ型のドキュメント

QFlags::Int

暗黙の変換だけでなく、格納にも使用される整数型の型定義。列挙型の基礎となる型が符号付きか符号なしかに応じて、int またはunsigned int のいずれかとなる。

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 にキャストできないようにします。

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

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

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

[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 オブジェクトを返す。

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

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

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

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

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)

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

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