你能使用 Qt foreach 循环迭代每个可能的枚举值吗?
Can you iterate over each possible enum value using a Qt foreach loop?
给定一个枚举:
enum AnEnum { Foo, Bar, Bash, Baz };
你能使用Qt的foreach循环迭代这些枚举中的每一个吗?
这段代码无法编译(不是我期望的...
foreach(AnEnum enum, AnEnum)
{
// do nothing
}
如果它被移动到 QMetaEnum 中,那么你可以像这样迭代它:
QMetaEnum e = ...;
for (int i = 0; i < e.keyCount(); i++)
{
const char* s = e.key(i); // enum name as string
int v = e.value(i); // enum index
...
}
http://qt-project.org/doc/qt-4.8/qmetaenum.html
使用 QNetworkReply 的示例,这是一个 QMetaEnum:
QNetworkReply::NetworkError error;
error = fetchStuff();
if (error != QNetworkReply::NoError) {
QString errorValue;
QMetaObject meta = QNetworkReply::staticMetaObject;
for (int i=0; i < meta.enumeratorCount(); ++i) {
QMetaEnum m = meta.enumerator(i);
if (m.name() == QLatin1String("NetworkError")) {
errorValue = QLatin1String(m.valueToKey(error));
break;
}
}
QMessageBox box(QMessageBox::Information, "Failed to fetch",
"Fetching stuff failed with error '%1`").arg(errorValue),
QMessageBox::Ok);
box.exec();
return 1;
}
Qt中的foreach
绝对仅适用于Qt容器。此处的文档中所述。
有一个
更简单的版本用于检索 QMetaEnum 对象(Qt 5.5 及更高版本):
QMetaEnum e = QMetaEnum::fromType<QLocale::Country>();
QStringList countryList;
for (int k = 0; k < e.keyCount(); k++)
{
QLocale::Country country = (QLocale::Country) e.value(k);
countryList.push_back(QLocale::countryToString(country));
}
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 不带大括号的枚举形式
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 枚举环境变量的惯用C++14/C++17方法
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 元编程构造,它返回枚举的基础类型和迭代器的整数
- C++:使用枚举类型进行迭代
- 如何在类似java的c++中迭代器枚举
- 如何按标准迭代枚举
- 你能使用 Qt foreach 循环迭代每个可能的枚举值吗?
- 在c++中迭代连续枚举值的最简单方法
- 用于枚举图中所有节点值的假迭代器操作
- 迭代Vs.枚举
- 迭代方向枚举
- 不带循环迭代器的枚举
- 如何迭代枚举