ドキュメント:http://doc.qt.io/qt-5/qflags.html#operator-Int
質問。1つずつテストせずにどのフラグが設定されているか知りたいので、int番号が必要です。QFlagsを返す多くのqtメソッドの1つでその演算子を使用する方法の例を誰かが提供できますか?
QFlags.h
ソースコード(https://android.googlesource.com/platform/prebuilts/android-emulator-build/qt/+/master/common/include/QtCore/qflags.h)を参照する
これは、「Int」演算子のQFlagsでの定義です。
Q_DECL_CONSTEXPR inline operator Int() const Q_DECL_NOTHROW { return i; }
そして、returnステートメントの「i」は次のように宣言されます。
Int i;
そして「Int」は次のように宣言されます
typedef int Int
以下の2つのコンストラクタに注意してくださいQFlags
。最初のコンストラクターはEnum
パラメーターとして受け取り、2番目のコンストラクターはQFlag
パラメーターとして受け取ります。
Q_DECL_CONSTEXPR inline QFlags(Enum f) Q_DECL_NOTHROW : i(Int(f)) {}
Q_DECL_CONSTEXPR inline QFlags(QFlag f) Q_DECL_NOTHROW : i(f) {}
上記のコンストラクターに気付いた後Enum
、がコンストラクターに渡されると、列挙型はsigned
1つまたはunsigned
1つになります。QFlags
内部的に型はそれをint
usingにキャストしInt
ます。
以下の例を考えてみましょう。
//Qt::CursorShape is an Enum
Qt::CursorShape shape = Qt::ArrowCursor;
//Create QFlags object by passing "ENUM" as parameter
QFlags<Qt::CursorShape> qF(shape);
//Create QFlags object by just passing FLAG as a parameter
QFlags<Qt::CursorShape> q(Qt::ArrowCursor);
ここで、「Int」演算子が呼び出される状況:以下のコードでは、最初のステートメントがInt
2番目のステートメントではなく演算子を呼び出します。
//Now try getting the values.
int test = qF; //In this case the "Int" operator is called.
int test1 = q;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加