构建一个自己的枚举类型Ship,并且将它注册后转存到枚举器QMetaEnum中去,通过枚举器自带的函数就能够进行枚举类字符串和数字的映射关系了。 在整个映射的过程中,运用到了一个中间容器QStringList,通
时间: 2024-12-18 09:34:15 浏览: 15
在C++中,你可以创建一个名为`Ship`的枚举类型,然后将其注册到`QMetaEnum`中,以便于转换成字符串和整数。以下是步骤:
首先,定义枚举类型`Ship`:
```cpp
enum class Ship {
Battleship,
Cruiser,
Submarine,
Destroyer,
PatrolBoat
};
```
接下来,你需要创建一个`QMetaObject`实例并关联这个枚举:
```cpp
#include <QObject>
#include <QMetaEnum>
class MyClass : public QObject {
public:
MyClass(QObject* parent = nullptr) : QObject(parent) {}
static void initEnum(QMetaObject* metaObj) {
QMetaEnum enumInfo = metaObj->indexOfEnumerator("Ship");
if (enumInfo.isValid()) {
qDebug() << "Enum initialized successfully.";
// 创建一个QStringList保存枚举值及其对应的字符串
QStringList shipStrings;
for (int i = 0; i < enumInfo.keyCount(); ++i) {
shipStrings << QString::fromStdString(enumInfo.valueName(i));
}
// 这里可以将shipStrings存储起来或者直接操作,比如添加到配置文件等
} else {
qDebug() << "Failed to initialize the enum.";
}
}
static QMetaEnum shipEnum() { return metaObject()->enumerator(Ship::staticMetaObject.indexOfEnumerator("Ship")); }
};
// 使用时,在MyClass的静态成员函数中获取枚举器
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyClass obj;
MyClass::initEnum(&obj.metaObject());
QMetaEnum shipEnum = MyClass::shipEnum();
// 现在你可以通过shipEnum来进行字符串到枚举值、枚举值到字符串的转换
return app.exec();
}
```
在这个例子中,`initEnum`函数用于初始化枚举器并将枚举值和字符串放入`QStringList`。然后你可以通过`shipEnum`进行相应的映射。
阅读全文