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 |
パブリックな型
パブリック関数
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) |
マクロ
Q_DECLARE_FLAGS(Flags, Enum) | |
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) |
詳しい説明
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)
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
を返す。
注意: 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 オブジェクトを返す。
関連する非会員
[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()マクロは、Flags 、QFlags<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.