2017-04-18 112 views
1

文檔:http://doc.qt.io/qt-5/qflags.html#operator-Int如何使用QFlags的運算符Int()?

問題。我想知道什麼標誌設置沒有一個接一個的測試,所以我想要的int數。任何人都可以提供一個例子,說明如何在QFlags的許多qt方法之一中使用該運算符?

+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

這是QFlags爲 「內部」 運算符的定義。

Q_DECL_CONSTEXPR inline operator Int() const Q_DECL_NOTHROW { return i; } 

與 「我」,在return語句被聲明爲

Int i; 

與 「內部」 被聲明爲

typedef int Int 

通知QFlags以下兩個構造函數。第一個構造函數以Enum作爲參數,第二個構造函數以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之一。 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運營商,而不是在第二次發言。

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

謝謝你的回答。這幫了很多。 – aarelovich

+0

不錯。這些評論非常激勵。謝謝。 – Naidu