文檔:http://doc.qt.io/qt-5/qflags.html#operator-Int如何使用QFlags的運算符Int()?
問題。我想知道什麼標誌設置沒有一個接一個的測試,所以我想要的int數。任何人都可以提供一個例子,說明如何在QFlags的許多qt方法之一中使用該運算符?
文檔:http://doc.qt.io/qt-5/qflags.html#operator-Int如何使用QFlags的運算符Int()?
問題。我想知道什麼標誌設置沒有一個接一個的測試,所以我想要的int數。任何人都可以提供一個例子,說明如何在QFlags的許多qt方法之一中使用該運算符?
通過參照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;
謝謝你的回答。這幫了很多。 – aarelovich
不錯。這些評論非常激勵。謝謝。 – Naidu
這意味着它會在int類型的地方隱式轉換爲int類型。 – dtech
這個問題並不特定於Qt。您正在查看隱式轉換運算符,一個C++功能。有關詳細信息,請參見[此答案](http://stackoverflow.com/a/16615725/1329652)。 –