2017-04-18 8 views
1

ドキュメント:http://doc.qt.io/qt-5/qflags.html#operator-IntQFlagsの演算子Int()を使うには?

質問があります。私はどのフラグが1つずつテストされているかを知りたいので、int型の数値が必要です。 QFlagsを再現する多くのqtメソッドの1つで、その演算子を使用する方法の例を誰かが提供できますか?

+1

つまり、intをとる場所では暗黙的にintに変換されます。 – dtech

+0

質問はQtに固有のものではありません。あなたは暗黙の変換演算子、C + +の機能を見ている。詳細については、[この回答](http://stackoverflow.com/a/16615725/1329652)を参照してください。 –

答えて

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; } 

そして、 "i" はreturn文で宣言されているが

Int i; 

そして "INT" として

typedef int Int 

お知らせQFlagsの以下の2つのコンストラクタとして宣言されています。最初のコンストラクタはパラメータとして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一つまたはunsigned 1つであることができます。 QFlagsは内部でIntを使用して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演算子とないを呼び出します。

//Now try getting the values. 
int test = qF; //In this case the "Int" operator is called. 
int test1 = q; 
+0

あなたの答えをありがとう。これは多くの助けとなりました。 – aarelovich

+0

ニース。そのようなコメントは非常に意欲的です。ありがとう。 – Naidu

関連する問題