文档:http://doc.qt.io/qt-5/qflags.html#operator-Int
问题。我想知道在没有逐一测试的情况下设置了哪些标志,所以我想要int号。任何人都可以提供一个如何在重新生成QFlags的许多qt方法之一中使用该运算符的示例吗?
答案 0 :(得分:3)
引用QFlags.h
源代码(https://android.googlesource.com/platform/prebuilts/android-emulator-build/qt/+/master/common/include/QtCore/qflags.h)
这是QFlags中“Int”运算符的定义。
Q_DECL_CONSTEXPR inline operator Int() const Q_DECL_NOTHROW { return i; }
返回语句中的“i”声明为
Int i;
并且“Int”被声明为
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”运算符的情况:在下面的代码中,第一个语句调用Int
运算符而不是第二个语句。
//Now try getting the values.
int test = qF; //In this case the "Int" operator is called.
int test1 = q;