记录一下,以备以后查阅
enum TestEnum{
aa,
bb,
cc
};
Q_DECLARE_FLAGS(TestEnums, TestEnum);
Q_DECLARE_OPERATORS_FOR_FLAGS(TestEnums);
①Q_DECLARE_FLAGS将自动创建一个QFlags类(用于存储枚举值的组合)的实例,将支持QFlags的函数如setFlag。
②Q_DECLARE_OPERATORS_FOR_FLAGS里面对'|'符号进行了重载,使枚举支持'|'符号。
使用QFlags类或直接采用|运算符(QFlags对象保存了几个不同值):
//![使用QFlags]
//相当于模板实例化了一个类TestEnums
//::TestEnums storage_flags;
//storage_flags.setFlag(TestEnum::aa);
//storage_flags.setFlag(TestEnum::bb);
//outputTestEnum(storage_flags);
//![使用|运算符]
outputTestEnum(TestEnum::bb | TestEnum::aa | TestEnum::cc);
//QFlags默认所有位置0,添加0会被视为无效值
void MainWindow::outputTestEnum(TestEnums flag)
{
if(flag.testFlag(aa)){
qDebug() << "aa";
}
if(flag.testFlag(bb)){
qDebug() << "bb";
}
if(flag.testFlag(cc)){
qDebug() << "cc";
}
}