Qt实现自动遍历枚举
标准 C++ 本身不支持直接遍历普通 enum,Qt 自带枚举遍历能力,只要加 Q_ENUM 宏,就能自动获取所有枚举值。
1. 定义枚举(必须在 QObject 子类内)
#include <QObject>
class MenuType : public QObject
{
Q_OBJECT
public:
enum Menu
{
Menu1,
Menu2,
Menu3
};
Q_ENUM(Menu) //注册枚举到元对象系统
};
2. 遍历所有枚举值
#include <QMetaEnum>
#include <QDebug>
//获取枚举元对象
const QMetaEnum metaEnum = QMetaEnum::fromType<MenuType::Menu>();
qDebug() << "Enum name:" << metaEnum.name();
qDebug() << "===== Start iterating =====";
//遍历所有枚举值
for (int i = 0; i < metaEnum.keyCount(); ++i)
{
const char* name = metaEnum.key(i); //枚举字符串名
auto menu = static_cast<MenuType::Menu>(metaEnum.value(i)); //枚举数值
qDebug() << "Sequence:" << i
<< " name:" << name
<< " value:" << menu;
}
3. 输出信息
Enum name: Menu
===== Start iterating =====
Sequence: 0 name: Menu1 value: MenuType::Menu1
Sequence: 1 name: Menu2 value: MenuType::Menu2
Sequence: 2 name: Menu3 value: MenuType::Menu3

浙公网安备 33010602011771号