#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <QFlags>
class TestClass
{
public:
enum Option {
OptionA = 0x1, // 0x000001
OptionB = 0x2, // 0x000010
OptionC = 0x4, // 0x000100
OptionD = 0x8, // 0x001000
OptionE = 0x10 // 0x010000
// ... some more options with value which is a power of two
};
Q_DECLARE_FLAGS(Options, Option) //这里调完之后 就用Options 代替 QFlags<Option> 类型了。
};
Q_DECLARE_OPERATORS_FOR_FLAGS(TestClass::Options) //里面重写了"|"操作符
#endif // TESTCLASS_H
#include <QtCore/QCoreApplication>
#include <QDebug>
void test (TestClass::Options flag) //flag 是 QFlags<Option>类型 里面存储着 一个或多个Option的值。
{
if (flag.testFlag(TestClass::OptionA)) //判断OptionA选项是否在flag中已被设置,若已被设置返回true,否则返回false,以下雷同
qDebug() << "A";
if (flag.testFlag(TestClass::OptionB))
qDebug() << "B";
if (flag.testFlag(TestClass::OptionC))
qDebug() << "C";
}
int main()
{
test (TestClass::OptionA);
test (TestClass::OptionA | TestClass::OptionB);
test (TestClass::OptionA | TestClass::OptionB | TestClass::OptionC);
// test (0x1); // error
}
执行结果:
QFlags类是一个模板类,里面的关键代码是两个宏指令:
Q_DECLARE_FLAGS(Options, Option) Q_DECLARE_OPERATORS_FOR_FLAGS(TestClass::Options)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142645.html