QFlags Class
template <typename Enum> class QFlagsQFlags クラスは、列挙型の値の 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 |
| 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) |
(since 6.2) bool | operator!=(Enum lhs, QFlags<T> rhs) |
(since 6.2) bool | operator!=(QFlags<T> lhs, Enum rhs) |
(since 6.2) bool | operator!=(QFlags<T> lhs, QFlags<T> rhs) |
(since 6.2) bool | operator==(Enum lhs, QFlags<T> rhs) |
(since 6.2) bool | operator==(QFlags<T> lhs, Enum rhs) |
(since 6.2) bool | operator==(QFlags<T> lhs, QFlags<T> rhs) |
マクロ
| Q_DECLARE_FLAGS(Flags, Enum) | |
| Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) |
詳細な説明
QFlags<ENUM> は、Enum が列挙型であるテンプレートクラスです。QFlags は、列挙値の組み合わせを格納するために Qt 全体で使用されています。
列挙値の OR 組み合わせを格納するための従来の C++ での手法は、int またはuint 変数を使用することです。この手法の不便な点は、型チェックが全く行われないことです。どの列挙値でも他の任意の列挙値と OR 演算され、int またはuint を引数とする関数に渡されてしまう可能性があります。
Qt 6.9 以降、QFlags は 64 ビットの列挙型をサポートしています。32 ビットを超える場合は、列挙子が削除されても列挙型や QFlags 型のサイズが変化しないようにするため、明示的な(固定の)基底型を使用することを推奨します。 また、一部のコンパイラでは、明示的な基底型が指定されている場合にのみ、enum 型のサイズを32ビットより大きくします。
Qt::AlignmentFlagQtでは、型安全性を確保するためにQFlagsを使用しています。例えば、Qt::Alignment 型は単にQFlags<XML-ph-0001@deepl.internal>の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() を使用してください。この場合、Q_DECLARE_FLAGS() は、対応する列挙型と同じスコープ(クラスまたは名前空間)内に記述する必要があります。
例:
class MyClass_1
{
public:
enum Option {
NoOptions = 0x0,
ShowTabs = 0x1,
ShowAll = 0x2,
SqueezeBlank = 0x4
};
Q_DECLARE_FLAGS(Options, Option)
//...
};
Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass_1::Options)これにより、MyClass::Options 型を使用して、MyClass::Option の値の組み合わせを格納できるようになります。
フラグとメタオブジェクトシステム
Q_DECLARE_FLAGS() マクロはフラグをメタオブジェクトシステムに公開しないため、Qt Script での使用やQt Widgets Designer での編集はできません。これらの目的でフラグを利用可能にするには、Q_FLAG() マクロを使用する必要があります:
class MyClass_2
{
Q_OBJECT
public:
enum Option {
NoOptions = 0x0,
ShowTabs = 0x1,
ShowAll = 0x2,
SqueezeBlank = 0x4
};
Q_DECLARE_FLAGS(Options, Option)
Q_FLAG(Options)
//...
};
Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass_2::Options)命名規則
列挙型および関連する QFlags 型に対する適切な命名規則として、列挙型には単数形の名前(例:Option )、QFlags 型には複数形の名前(例:Options )を付けることが推奨されます。 QFlags 型に単数形の名前(例:Alignment )を付けたい場合は、列挙型の接尾辞として「Flag 」を使用できます(例:AlignmentFlag )。
メンバ型のドキュメント
[alias] QFlags::Int
格納および暗黙の型変換に使用される整数型のtypedefです。列挙型の基底型が符号付きか符号なしか、およびQt 6.9以降では列挙型のサイズに応じて、qintXX またはquintXX のいずれかになります。通常、qint32 (int )またはquint32 (unsigned )となります。
QFlags::enum_type
列挙型テンプレート型のtypedef。
メンバ関数のドキュメント
[constexpr noexcept default] QFlags::QFlags()
フラグが設定されていない QFlags オブジェクトを作成します。
[constexpr noexcept] QFlags::QFlags(Enum flags)
flags を格納するQFlagsオブジェクトを構築します。
[constexpr noexcept] QFlags::QFlags(QFlag flag) requires (sizeof(Enum) == sizeof(int))
整数flag で初期化されたQFlagsオブジェクトを生成します。
QFlag 型はヘルパー型です。ここで `int` の代わりにこれを使用することで、任意の列挙型値を QFlags にキャストできないように効果的に保証できます。一方、型指定のない列挙型値(つまり、int 値)はキャスト可能です。
このコンストラクタは、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 で導入されました。
[implicit] 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)
on がtrue の場合、フラグflag を設定し、on がfalse の場合、そのフラグを解除します。このオブジェクトへの参照を返します。
[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` を返します。
true 注: flag に 1 に設定されたビットが複数ある場合 (たとえば、他の列挙子のビット単位の OR 演算の結果に等しい列挙子である場合など)、この関数は、このフラグオブジェクトのすべてのビットが設定されている場合に限り、true を返します。 一方、flag に1に設定されたビットが含まれていない場合(つまり、整数としての値が0である場合)、この関数は、このflagsオブジェクトにも1に設定されたビットが含まれていない場合に限り、` `を返します。
testAnyFlag()も参照してください 。
[constexpr noexcept, since 6.2] bool QFlags::testFlags(QFlags<T> flags) const
このフラグオブジェクトが指定された `flags` と一致する場合、true を返します。
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::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ビットに対応させるには、型安全なオーバーロードを使用してください。
これはオーバーロードされた関数です。
[implicit] 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 ` オブジェクトを返します。
関連する非メンバー関数
[constexpr noexcept, since 6.2] template <typename Enum> size_t qHash(QFlags<Enum> key, size_t seed = 0)
key のハッシュ値を、seed を計算のシードとして使用して返します。
この関数は Qt 6.2 で導入されました。
[constexpr noexcept, since 6.2] bool operator!=(Enum lhs, QFlags<T> rhs)
[constexpr noexcept, since 6.2] bool operator!=(QFlags<T> lhs, Enum rhs)
[constexpr noexcept, since 6.2] bool operator!=(QFlags<T> lhs, QFlags<T> rhs)
lhs とrhs を比較して不等式を判定します。2つの引数がまったく同じ値(ビットマスク)を表していない場合、それらは異なるものとみなされます。
これらの関数は Qt 6.2 で導入されました。
[constexpr noexcept, since 6.2] bool operator==(Enum lhs, QFlags<T> rhs)
[constexpr noexcept, since 6.2] bool operator==(QFlags<T> lhs, Enum rhs)
[constexpr noexcept, since 6.2] bool operator==(QFlags<T> lhs, QFlags<T> rhs)
lhs とrhs が等しいかどうかを比較します。2つの引数がまったく同じ値(ビットマスク)を表している場合、それらは等しいとみなされます。
これらの関数は 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() マクロは、Flags に対して、グローバルなビット演算子関数operator|() 、operator&() 、operator^() 、operator~() およびそれらの代入形式(&=、|=、^=)を宣言します。 は、QFlags<T> 型です。
詳細については、QFlags のドキュメントを参照してください。
Q_DECLARE_FLAGS()も参照してください 。
© 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.