В одном из ответов говорится: «Если вы знали, что значения перечисления были последовательными, например, перечисление Qt: Key».
Qt :: Значения ключа не являются последовательными . Некоторые сегменты перечислены.
Этот поток посвящен итерации по всем значениям в перечислении. Это действительно возможно в Qt из-за использования Meta Object System:
const QMetaObject *metaObject = qt_getQtMetaObject();
QMetaEnum keyEnum = metaObject->enumerator(metaObject->indexOfEnumerator("Key"));
for (int i = 0; i < keyEnum.keyCount(); ++i) {
qDebug() << keyEnum.key(i);
}
См. Также QObject :: metaObject () и макрос Q_ENUM.
Я думаю, что подобные вещи станет проще с C ++ 20? Но я не заглядывал в нее.