如何使用QFlags的运算符Int()?

时间:2017-04-18 16:57:08

标签: qt

文档:http://doc.qt.io/qt-5/qflags.html#operator-Int

问题。我想知道在没有逐一测试的情况下设置了哪些标志,所以我想要int号。任何人都可以提供一个如何在重新生成QFlags的许多qt方法之一中使用该运算符的示例吗?

1 个答案:

答案 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;