QFlags Class
template <typename Enum> class QFlagsQFlags クラスは、列挙値の OR 組合せを格納する型安全な方法を提供します。詳細...
Header: | #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> flags, size_t seed = 0) |
マクロ
Q_DECLARE_FLAGS(Flags, Enum) | |
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) |
詳しい説明
QFlags<Enum> クラスはテンプレート・クラスで、Enum は列挙型です。QFlags は、enum 値の組み合わせを格納するために 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)
命名規則
列挙型と関連するQFlags型の賢明な命名規則は、列挙型には単数形の名前(例えば、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である)場合、この関数は、このフラグオブジェクトにも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> flags, size_t seed = 0)
seed を計算の種として使用して、フラグflags のハッシュを計算します。
この関数は 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() マクロは、QFlags<T> 型であるFlags のグローバルoperator|()
関数を宣言します。
詳細はQFlags のドキュメントを参照してください。
Q_DECLARE_FLAGS()も参照してください 。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。