c++ - 您可以使用 Qt foreach 循环遍历每个可能的枚举值吗?

标签 c++ qt enums foreach

给定一个枚举:

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

使用作为 QMetaEnum 的 QNetworkReply 的示例:

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;
}

关于c++ - 您可以使用 Qt foreach 循环遍历每个可能的枚举值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423675/

相关文章:

c++ - VS2013 过载错误(gcc 不会发生)

c++ - 在 vector 上使用迭代器时,'std::bad_alloc' 甚至是错误的 vector 大小

sql-server - 使用 QSqlQuery 检索 SCOPE_IDENTITY()

c++ - 用户输入存储在 char 数组中 (C++)

c++ - 以编程方式在任何按钮上应用 Qt 鼠标悬停按钮突出显示

c++ - 将 QTimeEdit 与 time_t 一起使用 - 适配器模式 C++

python - 我可以为我的枚举的两个不同成员使用一个别名吗

qt - 将 Qt 的 Q_ENUMS 暴露给 QML

c# - 在 C# 中将整数转换为枚举

c++ - 什么是 C++ forwarditerator 的例子?