Qt实现自动遍历枚举

标准 C++ 本身不支持直接遍历普通 enumQt 自带枚举遍历能力,只要加 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
posted @ 2026-04-20 17:46  xhubobo  阅读(15)  评论(0)    收藏  举报