C++ 可以使用Qt foreach循环迭代每个可能的枚举值吗?
给定一个枚举:C++ 可以使用Qt foreach循环迭代每个可能的枚举值吗?,c++,qt,enums,foreach,C++,Qt,Enums,Foreach,给定一个枚举: enum AnEnum { Foo, Bar, Bash, Baz }; 您可以使用Qt的foreach循环迭代每个枚举吗 这段代码没有编译(不是我期望的…) Qt中的foreach显然只适用于Qt容器。文档中有说明。如果将其放入QMetaEnum中,您可以像这样对其进行迭代: QMetaEnum e = ...; for (int i = 0; i < e.keyCount(); i++) { const char* s = e.key(i); // enum
enum AnEnum { Foo, Bar, Bash, Baz };
您可以使用Qt的foreach循环迭代每个枚举吗
这段代码没有编译(不是我期望的…)
Qt中的foreach显然只适用于Qt容器。文档中有说明。如果将其放入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
...
}
qmetanum e=。。。;
对于(int i=0;i
使用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;
}
QNetworkReply::NetworkError错误;
error=fetchStuff();
if(错误!=QNetworkReply::无错误){
QString错误值;
QMetaObject meta=QNetworkReply::staticMetaObject;
对于(int i=0;i
有一个更简单的版本用于检索QMetaEnum对象(Qt 5.5及更高版本):
QMetaEnum e=QMetaEnum::fromType();
QStringList国家列表;
对于(int k=0;k
错误消息是怎么说的<代码>枚举类型不是像容器一样的数据结构,无法在其元素上进行迭代。
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;
}
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));
}