你可以使用Qt foreach循环迭代每个可能的枚举值吗?

Cor*_*ein 10 c++ foreach enums qt

鉴于枚举:

enum AnEnum { Foo, Bar, Bash, Baz };
Run Code Online (Sandbox Code Playgroud)

你能用Qt的foreach循环迭代这些枚举吗?

这段代码没有编译(不是我预期的......)

foreach(AnEnum enum, AnEnum)
{
// do nothing
}
Run Code Online (Sandbox Code Playgroud)

And*_*zos 14

如果它被编写到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
    ...
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)